hesabixArc/hesabixUI/hesabix_ui/lib/widgets/permission/permission_button.dart
2025-09-25 22:36:08 +03:30

116 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import '../../core/auth_store.dart';
/// کامپوننت برای نمایش دکمه‌ها بر اساس دسترسی‌ها
class PermissionButton extends StatelessWidget {
final String section;
final String action;
final Widget child;
final VoidCallback? onPressed;
final bool showIfNoPermission;
final Widget? fallbackWidget;
final AuthStore authStore;
const PermissionButton({
super.key,
required this.section,
required this.action,
required this.child,
required this.authStore,
this.onPressed,
this.showIfNoPermission = false,
this.fallbackWidget,
});
@override
Widget build(BuildContext context) {
if (!authStore.hasBusinessPermission(section, action)) {
if (showIfNoPermission) {
return child;
}
return fallbackWidget ?? const SizedBox.shrink();
}
return child;
}
}
/// کامپوننت برای نمایش ویجت‌ها بر اساس دسترسی‌ها
class PermissionWidget extends StatelessWidget {
final String section;
final String action;
final Widget child;
final Widget? fallbackWidget;
final AuthStore authStore;
const PermissionWidget({
super.key,
required this.section,
required this.action,
required this.child,
required this.authStore,
this.fallbackWidget,
});
@override
Widget build(BuildContext context) {
if (!authStore.hasBusinessPermission(section, action)) {
return fallbackWidget ?? const SizedBox.shrink();
}
return child;
}
}
/// کامپوننت برای نمایش لیست بر اساس دسترسی‌ها
class PermissionListTile extends StatelessWidget {
final String section;
final String action;
final Widget child;
final VoidCallback? onTap;
final AuthStore authStore;
const PermissionListTile({
super.key,
required this.section,
required this.action,
required this.child,
required this.authStore,
this.onTap,
});
@override
Widget build(BuildContext context) {
if (!authStore.hasBusinessPermission(section, action)) {
return const SizedBox.shrink();
}
return child;
}
}
/// کامپوننت برای نمایش منو بر اساس دسترسی‌ها
class PermissionMenuItem extends StatelessWidget {
final String section;
final String action;
final Widget child;
final AuthStore authStore;
const PermissionMenuItem({
super.key,
required this.section,
required this.action,
required this.child,
required this.authStore,
});
@override
Widget build(BuildContext context) {
if (!authStore.hasBusinessPermission(section, action)) {
return const SizedBox.shrink();
}
return child;
}
}