Frontend first draft
This commit is contained in:
13
frontend/pshared/lib/models/permissions/access.dart
Normal file
13
frontend/pshared/lib/models/permissions/access.dart
Normal file
@@ -0,0 +1,13 @@
|
||||
import 'package:pshared/models/permissions/data/permissions.dart';
|
||||
import 'package:pshared/models/permissions/descriptions/permissions.dart';
|
||||
|
||||
|
||||
class UserAccess {
|
||||
final PermissionsDescription descriptions;
|
||||
final PermissionsData permissions;
|
||||
|
||||
const UserAccess({
|
||||
required this.descriptions,
|
||||
required this.permissions,
|
||||
});
|
||||
}
|
||||
15
frontend/pshared/lib/models/permissions/action.dart
Normal file
15
frontend/pshared/lib/models/permissions/action.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
enum Action {
|
||||
create,
|
||||
read,
|
||||
update,
|
||||
delete,
|
||||
}
|
||||
|
||||
extension ActionExtension on Action {
|
||||
String toShortString() => toString().split('.').last;
|
||||
|
||||
static Action fromString(String value) => Action.values.firstWhere(
|
||||
(e) => e.toShortString() == value,
|
||||
orElse: () => throw ArgumentError('Invalid action: $value'),
|
||||
);
|
||||
}
|
||||
13
frontend/pshared/lib/models/permissions/action_effect.dart
Normal file
13
frontend/pshared/lib/models/permissions/action_effect.dart
Normal file
@@ -0,0 +1,13 @@
|
||||
import 'package:pshared/models/permissions/action.dart';
|
||||
import 'package:pshared/models/permissions/effect.dart';
|
||||
|
||||
|
||||
class ActionEffect {
|
||||
final Action action; // The action allowed or denied
|
||||
final Effect effect; // The effect of the policy ("allow" or "deny")
|
||||
|
||||
const ActionEffect({
|
||||
required this.action,
|
||||
required this.effect,
|
||||
});
|
||||
}
|
||||
12
frontend/pshared/lib/models/permissions/data/permission.dart
Normal file
12
frontend/pshared/lib/models/permissions/data/permission.dart
Normal file
@@ -0,0 +1,12 @@
|
||||
import 'package:pshared/models/permissions/data/policy.dart';
|
||||
|
||||
|
||||
class Permission {
|
||||
final Policy policy;
|
||||
final String accountRef;
|
||||
|
||||
const Permission({
|
||||
required this.policy,
|
||||
required this.accountRef,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'package:pshared/models/permissions/data/permission.dart';
|
||||
import 'package:pshared/models/permissions/data/policy.dart';
|
||||
import 'package:pshared/models/permissions/data/role.dart';
|
||||
|
||||
|
||||
class PermissionsData {
|
||||
final List<Role> roles;
|
||||
final List<Policy> policies;
|
||||
final List<Permission> permissions;
|
||||
|
||||
const PermissionsData({
|
||||
required this.roles,
|
||||
required this.policies,
|
||||
required this.permissions,
|
||||
});
|
||||
}
|
||||
18
frontend/pshared/lib/models/permissions/data/policy.dart
Normal file
18
frontend/pshared/lib/models/permissions/data/policy.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
import 'package:pshared/models/permissions/action_effect.dart';
|
||||
|
||||
|
||||
class Policy {
|
||||
final String roleDescriptionRef;
|
||||
final String organizationRef;
|
||||
final String descriptionRef;
|
||||
final String? objectRef;
|
||||
final ActionEffect effect;
|
||||
|
||||
const Policy({
|
||||
required this.roleDescriptionRef,
|
||||
required this.organizationRef,
|
||||
required this.descriptionRef,
|
||||
required this.objectRef,
|
||||
required this.effect,
|
||||
});
|
||||
}
|
||||
11
frontend/pshared/lib/models/permissions/data/role.dart
Normal file
11
frontend/pshared/lib/models/permissions/data/role.dart
Normal file
@@ -0,0 +1,11 @@
|
||||
class Role {
|
||||
final String accountRef;
|
||||
final String organizationRef;
|
||||
final String descriptionRef;
|
||||
|
||||
const Role({
|
||||
required this.accountRef,
|
||||
required this.descriptionRef,
|
||||
required this.organizationRef,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:pshared/models/permissions/descriptions/policy.dart';
|
||||
import 'package:pshared/models/permissions/descriptions/role.dart';
|
||||
|
||||
|
||||
class PermissionsDescription {
|
||||
final List<RoleDescription> roles;
|
||||
final List<PolicyDescription> policies;
|
||||
|
||||
const PermissionsDescription({
|
||||
required this.roles,
|
||||
required this.policies,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:pshared/models/resources.dart';
|
||||
import 'package:pshared/models/storable.dart';
|
||||
|
||||
|
||||
class PolicyDescription implements Storable {
|
||||
final Storable storable;
|
||||
final List<ResourceType>? resourceTypes;
|
||||
final String? organizationRef;
|
||||
|
||||
@override
|
||||
String get id => storable.id;
|
||||
@override
|
||||
DateTime get createdAt => storable.createdAt;
|
||||
@override
|
||||
DateTime get updatedAt => storable.updatedAt;
|
||||
|
||||
const PolicyDescription({
|
||||
required this.storable,
|
||||
required this.resourceTypes,
|
||||
required this.organizationRef,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import 'package:pshared/models/storable.dart';
|
||||
|
||||
|
||||
class RoleDescription implements Storable {
|
||||
final Storable storable;
|
||||
|
||||
@override
|
||||
String get id => storable.id;
|
||||
@override
|
||||
DateTime get createdAt => storable.createdAt;
|
||||
@override
|
||||
DateTime get updatedAt => storable.updatedAt;
|
||||
|
||||
final String organizationRef;
|
||||
|
||||
const RoleDescription({
|
||||
required this.storable,
|
||||
required this.organizationRef,
|
||||
});
|
||||
|
||||
factory RoleDescription.build({
|
||||
required String organizationRef,
|
||||
}) => RoleDescription(
|
||||
storable: newStorable(),
|
||||
organizationRef: organizationRef
|
||||
);
|
||||
}
|
||||
13
frontend/pshared/lib/models/permissions/effect.dart
Normal file
13
frontend/pshared/lib/models/permissions/effect.dart
Normal file
@@ -0,0 +1,13 @@
|
||||
enum Effect {
|
||||
allow,
|
||||
deny,
|
||||
}
|
||||
|
||||
extension EffectExtension on Effect {
|
||||
String toShortString() => toString().split('.').last;
|
||||
|
||||
static Effect fromString(String value) => Effect.values.firstWhere(
|
||||
(e) => e.toShortString() == value,
|
||||
orElse: () => throw ArgumentError('Invalid effect: $value'),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user