Skip to content

Commit 9e89851

Browse files
committed
feat(rbac): Add user preference bypass permission
- Added `userPreferenceBypassLimits` permission - Updated role permissions to include new permission - Implemented permission check in limit service - Modified `app_dependencies.dart` to inject `PermissionService` - Updated `DefaultUserPreferenceLimitService` to use new permission
1 parent 384267d commit 9e89851

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

lib/src/config/app_dependencies.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ class AppDependencies {
197197
);
198198
userPreferenceLimitService = DefaultUserPreferenceLimitService(
199199
remoteConfigRepository: remoteConfigRepository,
200+
permissionService: permissionService,
200201
log: Logger('DefaultUserPreferenceLimitService'),
201202
);
202203

lib/src/rbac/permissions.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,8 @@ abstract class Permissions {
5757

5858
// Dashboard Permissions
5959
static const String dashboardLogin = 'dashboard.login';
60+
61+
// User Preference Permissions
62+
static const String userPreferenceBypassLimits =
63+
'user_preference.bypass_limits';
6064
}

lib/src/rbac/role_permissions.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ final Set<String> _dashboardAdminPermissions = {
5151
Permissions.remoteConfigCreate,
5252
Permissions.remoteConfigUpdate,
5353
Permissions.remoteConfigDelete,
54+
Permissions.userPreferenceBypassLimits,
5455
};
5556

5657
/// Defines the mapping between user roles (both app and dashboard) and the

lib/src/services/default_user_preference_limit_service.dart

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:ht_api/src/rbac/permission_service.dart';
2+
import 'package:ht_api/src/rbac/permissions.dart';
13
import 'package:ht_api/src/services/user_preference_limit_service.dart';
24
import 'package:ht_data_repository/ht_data_repository.dart';
35
import 'package:ht_shared/ht_shared.dart';
@@ -11,11 +13,14 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
1113
/// {@macro default_user_preference_limit_service}
1214
const DefaultUserPreferenceLimitService({
1315
required HtDataRepository<RemoteConfig> remoteConfigRepository,
16+
required PermissionService permissionService,
1417
required Logger log,
1518
}) : _remoteConfigRepository = remoteConfigRepository,
19+
_permissionService = permissionService,
1620
_log = log;
1721

1822
final HtDataRepository<RemoteConfig> _remoteConfigRepository;
23+
final PermissionService _permissionService;
1924
final Logger _log;
2025

2126
// Assuming a fixed ID for the RemoteConfig document
@@ -34,8 +39,11 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
3439
);
3540
final limits = remoteConfig.userPreferenceConfig;
3641

37-
// Admins have no limits.
38-
if (user.dashboardRole == DashboardUserRole.admin) {
42+
// Users with the bypass permission (e.g., admins) have no limits.
43+
if (_permissionService.hasPermission(
44+
user,
45+
Permissions.userPreferenceBypassLimits,
46+
)) {
3947
return;
4048
}
4149

@@ -94,8 +102,11 @@ class DefaultUserPreferenceLimitService implements UserPreferenceLimitService {
94102
);
95103
final limits = remoteConfig.userPreferenceConfig;
96104

97-
// Admins have no limits.
98-
if (user.dashboardRole == DashboardUserRole.admin) {
105+
// Users with the bypass permission (e.g., admins) have no limits.
106+
if (_permissionService.hasPermission(
107+
user,
108+
Permissions.userPreferenceBypassLimits,
109+
)) {
99110
return;
100111
}
101112

0 commit comments

Comments
 (0)