Files
kulakpos_app/lib/service/check_user_role_permission_provider.dart
2026-02-07 15:57:09 +07:00

273 lines
9.4 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../Provider/profile_provider.dart';
import '../model/business_info_model.dart';
class UserPermissionNotifier extends StateNotifier<List<String>> {
final Ref ref;
late final ProviderSubscription<AsyncValue<BusinessInformationModel>> _subscription;
bool _visibilityIsNull = false;
UserPermissionNotifier(this.ref) : super([]) {
_subscription = ref.listen<AsyncValue<BusinessInformationModel>>(
businessInfoProvider,
(previous, next) {
next.whenData((businessInfo) {
final user = businessInfo.data?.user;
if (user != null) {
_visibilityIsNull = user.visibilityIsNull;
state = user.getAllPermissions();
} else {
_visibilityIsNull = false;
state = [];
}
});
if (next.hasError) {
_visibilityIsNull = false;
state = [];
}
},
fireImmediately: true,
);
}
bool get visibilityIsNull => _visibilityIsNull;
@override
void dispose() {
_subscription.close();
super.dispose();
}
bool has(String permission) => state.contains(permission);
}
final userPermissionProvider = StateNotifierProvider<UserPermissionNotifier, List<String>>(
(ref) => UserPermissionNotifier(ref),
);
class PermissionService {
final WidgetRef ref;
PermissionService(this.ref);
bool hasPermission(String permission, {BuildContext? context}) {
final permissions = ref.read(userPermissionProvider);
final visibilityIsNull = ref.read(userPermissionProvider.notifier).visibilityIsNull;
if (visibilityIsNull) {
return true;
}
if (permissions.isEmpty) {
return false;
}
final result = permissions.contains(permission);
return result;
}
bool hasAnyPermission(List<String> permissions) {
final userPermissions = ref.read(userPermissionProvider);
final visibilityIsNull = ref.read(userPermissionProvider.notifier).visibilityIsNull;
if (visibilityIsNull) {
return true;
}
if (userPermissions.isEmpty) {
return false;
}
return permissions.any((permission) => userPermissions.contains(permission));
}
}
enum Permit {
dashboardRead('dashboard.read'),
salesRead('sales.read'),
salesCreate('sales.create'),
salesUpdate('sales.update'),
salesDelete('sales.delete'),
salesPriceView('sales.price'),
inventoryRead('inventory.read'),
inventoryCreate('inventory.create'),
inventoryPriceView('inventory.price'),
saleReturnsRead('sale-returns.read'),
saleReturnsCreate('sale-returns.create'),
saleReturnsPriceView('sale-returns.price'),
purchasesRead('purchases.read'),
purchasesCreate('purchases.create'),
purchasesUpdate('purchases.update'),
purchasesDelete('purchases.delete'),
purchasesPriceView('purchases.price'),
purchaseReturnsRead('purchase-returns.read'),
purchaseReturnsCreate('purchase-returns.create'),
purchaseReturnPriceView('purchase-returns.price'),
productsRead('products.read'),
productsCreate('products.create'),
productsUpdate('products.update'),
productsDelete('products.delete'),
productsPriceView('products.price'),
branchesRead('branches.read'),
branchesCreate('branches.create'),
branchesUpdate('branches.update'),
branchesDelete('branches.delete'),
productsExpiredRead('products-expired.read'),
barcodesRead('barcodes.read'),
barcodesCreate('barcodes.create'),
bulkUploadsRead('bulk-uploads.read'),
bulkUploadsCreate('bulk-uploads.create'),
categoriesRead('categories.read'),
categoriesCreate('categories.create'),
categoriesUpdate('categories.update'),
categoriesDelete('categories.delete'),
brandsRead('brands.read'),
brandsCreate('brands.create'),
brandsUpdate('brands.update'),
brandsDelete('brands.delete'),
unitsRead('units.read'),
unitsCreate('units.create'),
unitsUpdate('units.update'),
unitsDelete('units.delete'),
productModelsRead('product-models.read'),
productModelsCreate('product-models.create'),
productModelsUpdate('product-models.update'),
productModelsDelete('product-models.delete'),
stocksRead('stocks.read'),
stocksPriceView('stocks.price'),
expiredProductsRead('expired-products.read'),
partiesRead('parties.read'),
partiesCreate('parties.create'),
partiesUpdate('parties.update'),
partiesDelete('parties.delete'),
partiesPriceView('parties.price'),
incomesRead('incomes.read'),
incomesCreate('incomes.create'),
incomesUpdate('incomes.update'),
incomesDelete('incomes.delete'),
incomesPriceView('incomes.price'),
incomeCategoriesRead('income-categories.read'),
incomeCategoriesCreate('income-categories.create'),
incomeCategoriesUpdate('income-categories.update'),
incomeCategoriesDelete('income-categories.delete'),
expensesRead('expenses.read'),
expensesCreate('expenses.create'),
expensesUpdate('expenses.update'),
expensesDelete('expenses.delete'),
expensesPriceView('expenses.price'),
expenseCategoriesRead('expense-categories.read'),
expenseCategoriesCreate('expense-categories.create'),
expenseCategoriesUpdate('expense-categories.update'),
expenseCategoriesDelete('expense-categories.delete'),
vatsRead('vats.read'),
vatsCreate('vats.create'),
vatsUpdate('vats.update'),
vatsDelete('vats.delete'),
duesRead('dues.read'),
subscriptionsRead('subscriptions.read'),
lossProfitsRead('loss-profits.read'),
paymentTypesRead('payment-types.read'),
paymentTypesCreate('payment-types.create'),
paymentTypesUpdate('payment-types.update'),
paymentTypesDelete('payment-types.delete'),
rolesRead('roles.read'),
rolesCreate('roles.create'),
rolesUpdate('roles.update'),
rolesDelete('roles.delete'),
departmentRead('department.read'),
departmentCreate('department.create'),
departmentUpdate('department.update'),
departmentDelete('department.delete'),
designationsRead('designations.read'),
designationsCreate('designations.create'),
designationsUpdate('designations.update'),
designationsDelete('designations.delete'),
shiftsRead('shifts.read'),
shiftsCreate('shifts.create'),
shiftsUpdate('shifts.update'),
shiftsDelete('shifts.delete'),
employeesRead('employees.read'),
employeesCreate('employees.create'),
employeesUpdate('employees.update'),
employeesDelete('employees.delete'),
leaveTypesRead('leave-types.read'),
leaveTypesCreate('leave-types.create'),
leaveTypesUpdate('leave-types.update'),
leaveTypesDelete('leave-types.delete'),
leavesRead('leaves.read'),
leavesCreate('leaves.create'),
leavesUpdate('leaves.update'),
leavesDelete('leaves.delete'),
holidaysRead('holidays.read'),
holidaysCreate('holidays.create'),
holidaysUpdate('holidays.update'),
holidaysDelete('holidays.delete'),
attendancesRead('attendances.read'),
attendancesCreate('attendances.create'),
attendancesUpdate('attendances.update'),
attendancesDelete('attendances.delete'),
payrollsRead('payrolls.read'),
payrollsCreate('payrolls.create'),
payrollsUpdate('payrolls.update'),
payrollsDelete('payrolls.delete'),
attendanceReportsRead('attendance-reports.read'),
payrollReportsRead('payroll-reports.read'),
leaveReportsRead('leave-reports.read'),
warehousesRead('warehouses.read'),
warehousesCreate('warehouses.create'),
warehousesUpdate('warehouses.update'),
warehousesDelete('warehouses.delete'),
transfersRead('transfers.read'),
transfersCreate('transfers.create'),
transfersUpdate('transfers.update'),
transfersDelete('transfers.delete'),
racksRead('racks.read'),
racksCreate('racks.create'),
racksUpdate('racks.update'),
racksDelete('racks.delete'),
shelfsRead('shelfs.read'),
shelfsCreate('shelfs.create'),
shelfsUpdate('shelfs.update'),
shelfsDelete('shelfs.delete'),
manageSettingsRead('manage-settings.read'),
manageSettingsUpdate('manage-settings.update'),
downloadApkRead('download-apk.read'),
saleReportsRead('sale-reports.read'),
saleReturnReportsRead('sale-return-reports.read'),
purchaseReportsRead('purchase-reports.read'),
purchaseReturnReportsRead('purchase-return-reports.read'),
vatReportsRead('vat-reports.read'),
incomeReportsRead('income-reports.read'),
expenseReportsRead('expense-reports.read'),
lossProfitsDetailsRead('loss-profits-details.read'),
stockReportsRead('stock-reports.read'),
dueReportsRead('due-reports.read'),
supplierDueReportsRead('supplier-due-reports.read'),
lossProfitReportsRead('loss-profit-reports.read'),
transactionHistoryReportsRead('transaction-history-reports.read'),
subscriptionReportsRead('subscription-reports.read'),
expiredProductReportsRead('expired-product-reports.read'),
dayBookReportsRead('day-book-reports.read'),
billWiseProfitRead('bill-wise-profit.read'),
cashflowRead('cashflow.read'),
balanceSheetRead('balance-sheet.read'),
taxReportRead('tax-report.read'),
customerLedgerRead('customer-ledger.read'),
supplierLedgerRead('supplier-ledger.read'),
parityWiseProfitRead('parity-wise-profit.read'),
top5CustomerRead('top-5-customer.read'),
top5SupplierRead('top-5-supplier.read'),
comboReportRead('combo-report.read'),
top5ProductRead('top-5-product.read'),
productWiseProfitLossRead('product-wise-profit-loss.read'),
productPurchaseReportRead('product-purchase-report.read'),
productSalesReportRead('product-sales-report.read'),
productPurchaseHistoryRead('product-purchase-history.read'),
productSaleHistoryRead('product-sale-history.read');
final String value;
const Permit(this.value);
}