Skip to content

Commit 6287ec5

Browse files
feat(policy): implement core policy management and evaluation interfaces with initial classes
1 parent 8e9542b commit 6287ec5

File tree

5 files changed

+94
-0
lines changed

5 files changed

+94
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import 'package:meta/meta.dart';
2+
3+
@immutable
4+
abstract class IPolicyEvaluator {
5+
Future<bool> evaluate(String roleName, String content);
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import 'package:meta/meta.dart';
2+
3+
@immutable
4+
abstract class IPolicyStorage {
5+
Future<Map<String, dynamic>> loadPolicies();
6+
Future<void> savePolicies(Map<String, dynamic> policies);
7+
Future<void> clearPolicies();
8+
}

lib/core/policy_manager.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import 'package:flutter/foundation.dart';
2+
import 'package:flutter_policy_engine/core/interfaces/i_policy_storage.dart';
3+
import 'package:flutter_policy_engine/models/policy.dart';
4+
5+
class PolicyManager extends ChangeNotifier {
6+
PolicyManager({
7+
required this.storage,
8+
});
9+
10+
final IPolicyStorage storage;
11+
Map<String, Policy> _policies = {};
12+
bool _isInitialized = false;
13+
14+
bool get isInitialized => _isInitialized;
15+
16+
Map<String, Policy> get policies => Map.unmodifiable(_policies);
17+
18+
Future<void> loadPolicies() async {
19+
throw UnimplementedError();
20+
}
21+
}

lib/core/role_evaluator.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:flutter_policy_engine/core/interfaces/i_policy_evaluator.dart';
2+
import 'package:flutter_policy_engine/models/policy.dart';
3+
import 'package:meta/meta.dart';
4+
5+
@immutable
6+
class RoleEvaluator implements IPolicyEvaluator {
7+
const RoleEvaluator(this._policies);
8+
9+
final Map<String, Policy> _policies;
10+
11+
@override
12+
Future<bool> evaluate(String roleName, String content) {
13+
// TODO: implement evaluate
14+
throw UnimplementedError();
15+
}
16+
}

lib/models/policy.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import 'package:meta/meta.dart';
2+
3+
@immutable
4+
class Policy {
5+
const Policy({
6+
required this.roleName,
7+
required this.allowedContent,
8+
this.metadata = const {},
9+
});
10+
11+
final String roleName;
12+
final List<String> allowedContent;
13+
final Map<String, dynamic> metadata;
14+
15+
Policy copyWith({
16+
String? roleName,
17+
List<String>? allowedContent,
18+
Map<String, dynamic>? metadata,
19+
}) =>
20+
Policy(
21+
roleName: roleName ?? this.roleName,
22+
allowedContent: allowedContent ?? this.allowedContent,
23+
metadata: metadata ?? this.metadata,
24+
);
25+
26+
bool isContentAllowed(String content) => allowedContent.contains(content);
27+
28+
@override
29+
bool operator ==(Object other) =>
30+
identical(this, other) ||
31+
other is Policy &&
32+
roleName == other.roleName &&
33+
allowedContent.length == other.allowedContent.length &&
34+
allowedContent
35+
.every((content) => other.allowedContent.contains(content));
36+
37+
@override
38+
int get hashCode => roleName.hashCode ^ allowedContent.hashCode;
39+
40+
@override
41+
String toString() =>
42+
'Policy(roleName: $roleName, allowedContent: $allowedContent, metadata: $metadata)';
43+
}

0 commit comments

Comments
 (0)