116 lines
2.7 KiB
Dart
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;
|
|
}
|
|
}
|