Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,56 @@
## 1.0.0 (2025-07-17)

* Initial commit ([f0f6dbd](https://github.com/aspicas/flutter_policy_engine/commit/f0f6dbd))
* Merge pull request #1 from aspicas/develop ([59c9c98](https://github.com/aspicas/flutter_policy_engine/commit/59c9c98)), closes [#1](https://github.com/aspicas/flutter_policy_engine/issues/1)
* Merge pull request #2 from aspicas/develop ([6a59b8f](https://github.com/aspicas/flutter_policy_engine/commit/6a59b8f)), closes [#2](https://github.com/aspicas/flutter_policy_engine/issues/2)
* Merge pull request #3 from aspicas/develop ([f8c3e27](https://github.com/aspicas/flutter_policy_engine/commit/f8c3e27)), closes [#3](https://github.com/aspicas/flutter_policy_engine/issues/3)
* Merge pull request #4 from aspicas/feature/add-contributing-file ([023c92e](https://github.com/aspicas/flutter_policy_engine/commit/023c92e)), closes [#4](https://github.com/aspicas/flutter_policy_engine/issues/4)
* Merge pull request #5 from aspicas/develop ([ef7016b](https://github.com/aspicas/flutter_policy_engine/commit/ef7016b)), closes [#5](https://github.com/aspicas/flutter_policy_engine/issues/5)
* Merge pull request #6 from aspicas/feature/update-flutter-version ([1310523](https://github.com/aspicas/flutter_policy_engine/commit/1310523)), closes [#6](https://github.com/aspicas/flutter_policy_engine/issues/6)
* Merge pull request #7 from aspicas/feature/update-flutter-version ([968e891](https://github.com/aspicas/flutter_policy_engine/commit/968e891)), closes [#7](https://github.com/aspicas/flutter_policy_engine/issues/7)
* Merge pull request #8 from aspicas/fix/cicd ([eb4c711](https://github.com/aspicas/flutter_policy_engine/commit/eb4c711)), closes [#8](https://github.com/aspicas/flutter_policy_engine/issues/8)
* chore: initial commit ([a0f2bea](https://github.com/aspicas/flutter_policy_engine/commit/a0f2bea))
* chore: update last commit message ([4d8d0d5](https://github.com/aspicas/flutter_policy_engine/commit/4d8d0d5))
* chore(analysis): update analysis options and linter rules for improved code quality and consistency ([c6ac2ee](https://github.com/aspicas/flutter_policy_engine/commit/c6ac2ee))
* chore(android): update Flutter version to 3.29.3 and add build files for multiple architectures ([f1d5e6d](https://github.com/aspicas/flutter_policy_engine/commit/f1d5e6d))
* chore(ios): update .gitignore and AppDelegate for Swift 5.7 compatibility ([1c5d4d5](https://github.com/aspicas/flutter_policy_engine/commit/1c5d4d5))
* chore(license): add a test placeholder to the LICENSE file ([4eb66ec](https://github.com/aspicas/flutter_policy_engine/commit/4eb66ec))
* chore(license): remove test placeholder from the LICENSE file ([bb31dd7](https://github.com/aspicas/flutter_policy_engine/commit/bb31dd7))
* chore(pubspec): update project description for clarity and add meta dependency ([8e9542b](https://github.com/aspicas/flutter_policy_engine/commit/8e9542b))
* chore(pubspec): update pubspec.yaml for better project visibility ([83515d3](https://github.com/aspicas/flutter_policy_engine/commit/83515d3))
* chore(release): 1.0.0 [skip ci] ([b7c6bb7](https://github.com/aspicas/flutter_policy_engine/commit/b7c6bb7))
* chore(release): configure semantic release with GitHub Actions and update dependencies ([94e1afe](https://github.com/aspicas/flutter_policy_engine/commit/94e1afe))
* chore(release): enhance semantic release configuration with conventional commits support ([03415fb](https://github.com/aspicas/flutter_policy_engine/commit/03415fb))
* chore(release): enhance semantic-release configuration to update pubspec.yaml version ([2e616d2](https://github.com/aspicas/flutter_policy_engine/commit/2e616d2))
* chore(release): simplify release message format by removing CHANGELOG notes ([9aa409d](https://github.com/aspicas/flutter_policy_engine/commit/9aa409d))
* chore(release): streamline changelog configuration and update release message format to skip CI ([b9907c8](https://github.com/aspicas/flutter_policy_engine/commit/b9907c8))
* chore(release): update semantic-release configuration to use POLICY_TOKEN ([6d60fe4](https://github.com/aspicas/flutter_policy_engine/commit/6d60fe4))
* chore(release): update semantic-release to use GH_TOKEN instead of POLICY_TOKEN ([40e650d](https://github.com/aspicas/flutter_policy_engine/commit/40e650d))
* chore(setup): add commit message template configuration ([8a9f2ac](https://github.com/aspicas/flutter_policy_engine/commit/8a9f2ac))
* chore(workflow): enhance commit message validation to cover entire branch ([1171679](https://github.com/aspicas/flutter_policy_engine/commit/1171679))
* fix(android): update fingerprint configuration files ([a80f46f](https://github.com/aspicas/flutter_policy_engine/commit/a80f46f))
* refactor(json): streamline JSON parsing and serialization, replacing deprecated methods ([b05031c](https://github.com/aspicas/flutter_policy_engine/commit/b05031c))
* refactor(logging): enhance LogHandler with detailed documentation and structured logging ([f97aa07](https://github.com/aspicas/flutter_policy_engine/commit/f97aa07))
* refactor(policy): consolidate policy management and evaluation and enhancing PolicyManager ([2ea9d97](https://github.com/aspicas/flutter_policy_engine/commit/2ea9d97))
* refactor(policy): enhance PolicyManager by optimizing JSON parsing with a mapped policy structure ([2c7f0cf](https://github.com/aspicas/flutter_policy_engine/commit/2c7f0cf))
* refactor(tests): enhance type safety and readability in policy test assertions ([4834a66](https://github.com/aspicas/flutter_policy_engine/commit/4834a66))
* refactor(tests): improve readability and maintainability by restructuring policy test cases ([c14be9c](https://github.com/aspicas/flutter_policy_engine/commit/c14be9c))
* feat(example): add example project to test the engine library ([778e376](https://github.com/aspicas/flutter_policy_engine/commit/778e376))
* feat(json): implement JsonHandler for robust JSON conversion and validation utilities ([a1c7993](https://github.com/aspicas/flutter_policy_engine/commit/a1c7993))
* feat(logging): implement LogHandler for structured logging and enhanced debugging capabilities ([4facc99](https://github.com/aspicas/flutter_policy_engine/commit/4facc99))
* feat(logging): introduce LogHandler for structured logging and configurable log levels ([85a5ee8](https://github.com/aspicas/flutter_policy_engine/commit/85a5ee8))
* feat(policy): enhance management by add deep copy functionality and integrating collection package ([7acd0aa](https://github.com/aspicas/flutter_policy_engine/commit/7acd0aa))
* feat(policy): implement core policy management and evaluation interfaces with initial classes ([6287ec5](https://github.com/aspicas/flutter_policy_engine/commit/6287ec5))
* feat(policy): integrate PolicyManager into example app and enhance UI for policy loading ([70aa451](https://github.com/aspicas/flutter_policy_engine/commit/70aa451))
* docs(code-of-conduct): add Contributor Covenant Code of Conduct to establish community standards ([54dc257](https://github.com/aspicas/flutter_policy_engine/commit/54dc257))
* docs(contributing): add contribution guidelines for the flutter_policy_engine project ([f1bdb7f](https://github.com/aspicas/flutter_policy_engine/commit/f1bdb7f))
* docs(issue-templates): add bug report and feature request templates to enhance issue tracking ([e645ffe](https://github.com/aspicas/flutter_policy_engine/commit/e645ffe))
* docs(pr-template): add a pull request template to standardize contributions ([f807e46](https://github.com/aspicas/flutter_policy_engine/commit/f807e46))
* docs(readme): enhance documentation with feature highlights and contribution guidelines ([afd8b7d](https://github.com/aspicas/flutter_policy_engine/commit/afd8b7d))
* docs(templates): add issue templates for bug reports and feature requests to improve issue tracking ([9e2ff7b](https://github.com/aspicas/flutter_policy_engine/commit/9e2ff7b))
* docs(tools): update doc using the setup file ([dc1a378](https://github.com/aspicas/flutter_policy_engine/commit/dc1a378))
* build(setup): add script that installed all the project needs ([6acd4e4](https://github.com/aspicas/flutter_policy_engine/commit/6acd4e4))

## 1.0.0 (2025-07-16)

* chore: initial commit ([a0f2bea](https://github.com/aspicas/flutter_policy_engine/commit/a0f2bea))
Expand Down
101 changes: 101 additions & 0 deletions example/lib/demo_content.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_policy_engine/flutter_policy_engine.dart';

class DemoContent extends StatefulWidget {
const DemoContent({super.key});

@override
State<DemoContent> createState() => _DemoContentState();
}

class _DemoContentState extends State<DemoContent> {
String _currentRole = 'guest';

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Rol actual: $_currentRole',
style: Theme.of(context).textTheme.headlineSmall,
),
const SizedBox(height: 16),

// Selector de rol
Row(
children: [
_buildRoleButton('guest'),
const SizedBox(width: 8),
_buildRoleButton('user'),
const SizedBox(width: 8),
_buildRoleButton('admin'),
],
),

const SizedBox(height: 32),

// Ejemplos de PolicyWidget
_buildPolicyExample('LoginPage', 'Página de Login'),
_buildPolicyExample('Dashboard', 'Dashboard'),
_buildPolicyExample('UserManagement', 'Gestión de Usuarios'),
_buildPolicyExample('Settings', 'Configuración'),

const SizedBox(height: 32),
],
),
);
}

Widget _buildRoleButton(String role) {
return ElevatedButton(
onPressed: () {
setState(() {
_currentRole = role;
});
},
style: ElevatedButton.styleFrom(
backgroundColor: _currentRole == role ? Colors.blue : Colors.grey,
),
child: Text(role),
);
}

Widget _buildPolicyExample(String content, String displayName) {
return Padding(
padding: const EdgeInsets.only(bottom: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('$displayName:'),
const SizedBox(height: 4),
PolicyWidget(
role: _currentRole,
content: content,
fallback: Card(
color: Colors.red[100],
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Acceso denegado para $displayName'),
),
),
onAccessDenied: () {
log('Acceso denegado para $_currentRole a $content');
},
child: Card(
color: Colors.green[100],
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Acceso permitido a $displayName'),
),
),
),
],
),
);
}
}
68 changes: 1 addition & 67 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_policy_engine/flutter_policy_engine.dart';
import 'package:flutter_policy_engine_example/policy_engine_demo.dart';

void main() {
runApp(const MyApp());
Expand All @@ -22,67 +20,3 @@ class MyApp extends StatelessWidget {
);
}
}

class PolicyEngineDemo extends StatefulWidget {
const PolicyEngineDemo({super.key});

@override
State<StatefulWidget> createState() {
return _PolicyEngineDemoState();
}
}

class _PolicyEngineDemoState extends State<PolicyEngineDemo> {
late PolicyManager policyManager;
bool _isInitialized = false;

@override
void initState() {
super.initState();
_initializePolicyManager();
}

Future<void> _initializePolicyManager() async {
policyManager = PolicyManager();
final policies = {
"admin": ["LoginPage", "Dashboard", "UserManagement", "Settings"],
"user": ["LoginPage", "Dashboard"],
"guest": ["LoginPage"]
};
try {
await policyManager.initialize(policies);
setState(() {
_isInitialized = true;
});
} catch (e) {
log(e.toString());
setState(() {
_isInitialized = false;
});
}
}

@override
Widget build(BuildContext context) {
if (!_isInitialized) {
return Scaffold(
appBar: AppBar(
title: const Text('Policy Engine Demo'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
SizedBox(height: 16),
Text('Loading policies...'),
],
),
),
);
}
return const Center(
child: Text('Policies loaded'),
);
}
}
75 changes: 75 additions & 0 deletions example/lib/policy_engine_demo.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_policy_engine/flutter_policy_engine.dart';
import 'package:flutter_policy_engine_example/demo_content.dart';

class PolicyEngineDemo extends StatefulWidget {
const PolicyEngineDemo({super.key});

@override
State<StatefulWidget> createState() {
return _PolicyEngineDemoState();
}
}

class _PolicyEngineDemoState extends State<PolicyEngineDemo> {
late PolicyManager policyManager;
bool _isInitialized = false;

@override
void initState() {
super.initState();
_initializePolicyManager();
}

Future<void> _initializePolicyManager() async {
policyManager = PolicyManager();
final policies = {
"admin": ["LoginPage", "Dashboard", "UserManagement", "Settings"],
"user": ["LoginPage", "Dashboard"],
"guest": ["LoginPage"]
};
try {
await policyManager.initialize(policies);
setState(() {
_isInitialized = true;
});
} catch (e) {
log(e.toString());
setState(() {
_isInitialized = false;
});
}
}

@override
Widget build(BuildContext context) {
if (!_isInitialized) {
return Scaffold(
appBar: AppBar(
title: const Text('Policy Engine Demo'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
SizedBox(height: 16),
Text('Loading policies...'),
],
),
),
);
}
return PolicyProvider(
policyManager: policyManager,
child: Scaffold(
appBar: AppBar(
title: const Text('Policy Engine Demo'),
),
body: const DemoContent(),
),
);
}
}
2 changes: 2 additions & 0 deletions lib/flutter_policy_engine.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
library flutter_policy_engine;

export 'src/core/policy_manager.dart';
export 'src/widgets/policy_widget.dart';
export 'src/core/policy_provider.dart';
Loading