jails / li3_access
Lithium PHP 框架的访问控制(DbAcl、规则、简单)
Requires
- php: >=5.4
- composer/installers: dev-master
- jails/li3_behaviors: dev-master
- jails/li3_tree: dev-master
This package is auto-updated.
Last update: 2024-08-29 03:47:33 UTC
README
不要在生产环境中使用。这是一个早期 alpha 版本。
需求
- PHP 5.4
- 此插件需要 li3_behaviors(仅当您打算使用 DbAcl 适配器时)。
- 此插件需要 li3_tree(仅当您打算使用 DbAcl 适配器时)。
- 此插件需要 li3_fixtures(仅当您打算运行 DbAcl 适配器测试时)。
安装
将代码检出至您的库目录之一
cd libraries
git clone git@github.com:jails/li3_access.git
将库包含在您的 /app/config/bootstrap/libraries.php
中
Libraries::add('li3_access');
展示
此插件提供了一些适配器,用于管理您的应用程序中的访问控制。它可以管理基于规则的简单系统以及访问控制列表系统。访问控制列表是一种以细粒度管理应用程序权限的方式。它不如基于规则的系统快,但允许对应用程序/模型进行更细粒度的控制。
API
简单适配器
简单适配器仅检查传递的数据是否为空。
Access::config('simple' => ['adapter' => 'Simple']); Access::check('rules', ['username' => 'Max']); //return `true` Access::check('rules', true); //return `true` Access::check('rules', []); //return `false`
规则适配器
规则适配器检查来自预定义/自定义闭包的访问。要使用此适配器,请按以下方式配置 Access
Access::config('rules', ['adapter' => 'Rules']);
规则适配器已包含以下规则: 'allowAll'
、'denyAll'
、'allowAnyUser'
、'allowIp'
。
使用示例
$user = Auth::check('auth_config_name'); Access::check('rules', $user, $request, ['rules' => ['allowAnyUser']]); $user = User::find('first', ['username' => 'psychic']); Access::check('rules', $user, $request, ['rules' => ['allowAnyUser']]);
带参数的规则
Access::check('rules', null, $request, [ 'rules' => [ 'allowIp' => [ 'ip' => '/10\.0\.1\.\d+/' //parameter to pass to the `'allowIp'` closure. ] ] ]);
您可以在 ::config()
上添加自定义规则
Access::config('rules' => [ 'adapter' => 'Rules', 'rules' => [ 'testDeny' => [ 'message' => 'Access denied.', 'rule' => function($requester) { return false; } ] ] ]);
或动态添加
Access::rules('rules', 'testDeny', function($requester) { return false; }, [ 'message' => 'Access denied.' ]);
DbAcl 适配器
此适配器目前仅适用于 SQL 数据库(即 MySQL、PostgreSQL 和 Sqlite3)。
Access::config('acl' => ['adapter' => 'DbAcl']);
访问控制列表(ACL)处理两个主要方面:想要东西的人和想要的东西。这通常表示为
- 访问控制对象(Aco),即想要的东西
- 访问请求对象(Aro),即想要某物的人
在 Acos 和 Aros 之间,有权限定义 Aros 和 Acos 之间的访问权限。
上面是使 MySQL 数据库能够开箱即用的所需架构
DROP TABLE IF EXISTS `acos`; CREATE TABLE `acos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(10) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, `fk_id` int(10) DEFAULT NULL, `alias` varchar(255) DEFAULT NULL, `lft` int(10) DEFAULT NULL, `rght` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ); DROP TABLE IF EXISTS `aros`; CREATE TABLE `aros` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(10) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, `fk_id` int(10) DEFAULT NULL, `alias` varchar(255) DEFAULT NULL, `lft` int(10) DEFAULT NULL, `rght` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ); DROP TABLE IF EXISTS `permissions`; CREATE TABLE `permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `aro_id` int(10) NOT NULL, `aco_id` int(10) NOT NULL, `privileges` text, PRIMARY KEY (`id`) );
当然,您需要根据您自己的 SQL 数据库调整此架构。
一旦 Acos 和 Aros 正确定义(请参阅测试的 fixtures 以更好地理解 Acos 和 Aros 的样子)。
您可以添加权限
Access::allow('acl', 'admin/max', 'controller/backend', ['read', 'create', 'update', 'delete']); //or: Access::allow('acl', 'admin/max', 'controller/backend', 'publish'); //or: $user = User::find('first', ['username' => 'max']); Access::allow('acl', $user, 'controller/backend', ['read', 'create', 'update', 'publish']);
您可以删除权限
Access::deny('acl', 'user/joe', 'controller/backend', ['delete']);
使用 Access::check()
检查一些权限
Access::check('acl', 'user/joe', 'controller/backend', ['delete']);
或使用 Access::get()
恢复 Aro/Aco 的所有权限
Access::get('acl', 'user/joe', 'controller/backend');
问候
li3 团队,Tom Maiaroto,Weluse,rich97,CakePHP 的 ACL,Pamela Anderson 以及所有使这一切成为可能的人。