classoutfit / acl-permission
一段非常简单的 CakePHP Acl 代码,用于获取新或现有 Acos 的权限,如果需要则创建它们,然后设置权限。
Requires
- php: ^5.6
- cakephp/cakephp: ~2.8
- composer/installers: *
This package is not auto-updated.
Last update: 2024-09-26 01:45:42 UTC
README
一段非常简单的代码,用于获取新或现有 Acos 的权限,如果需要则创建它们,然后以可重复的方式设置权限。
它做什么
Acl 数据仅凭外观难以理解,添加新的 Acos 或其权限也不容易。有些插件运行良好,但我发现它们有点慢,尤其是在大型 CakePHP 应用程序上操作时。我有点沮丧,也有些担忧,因为随着我的应用程序的发展,整个 Acl 数据似乎可能随时失控。我也倾向于在检查和设置权限时使用很多“视觉逻辑”,并希望有一些更可靠的东西。
我花了几个小时写了这个小的插件来完成一些简单的事情。
目标:当我向我的应用程序添加新的控制器或操作时,我希望创建新的控制器和操作的 Aco,然后为其设置一些权限。我还希望能够在准备就绪时可靠地重复此操作,从发布到预发布再到生产。
有两个关键元素;一个数据库表和一个控制器。该表以平面格式存储功能,使其一目了然地看到将要设置的权限。列包括
- plugin:插件的名称 - 如果这是核心代码 Aco(即不在插件中),则留空
- controller:控制器的名称(与控制器类的名称匹配,例如 ContactManager)
- action:要添加的操作的名称
- allow:要设置此权限的组 ID,用 '/' 分隔,例如 1/3/4 - 可以是字母或数字,但必须与您的组 ID 匹配
- deny:与 allow 相同
我一般构建的网站在组级别设置权限,而不是按单个用户设置,但我想将来可能可以解决这个问题。
运行代码时,插件将遍历记录。对于每一行,它检查 Acos 是否已存在。如果 'controllers' 的 Acos(作为一切的基础 Acos)不存在,插件、控制器或操作,它将创建它们。代码使用 Acos 的 ID 作为每个后续 Acos 的父级,以便它们存储在正确的地方。Acl 组件负责树结构。然后它检查 'allow' 和 'deny' 列。它将 ID 分解(因此 1/3/4 变为 1、3 和 4 存储在数组中),并调用 Acl 组件逐个为每个组设置允许或拒绝权限。
安装插件
- 在数据库中查找并运行 app/Config/Schema 中的 acl_permissions.sql 脚本
- 将插件复制到 app/Plugin/AclPermission
- 编辑 app/Config/bootstrap.php:CakePlugin::load(array( // 你的现有插件..., 'AclPermission' ));
- 将此函数添加到控制器中
public function set_permissions() { $this->AclPermission->AclPermission->set_permissions(); }
- 在控制器的前过滤器 () 中授予 Auth 权限给该操作:$this->Auth->allow('set_permissions');
您可以将此添加到 acl_permissions 表中,以确保正确设置权限,然后删除 Auth->allow 语句以供将来运行。该行将如下所示
- plugin:'AclPermission'
- 控制器: 'AclPermission'
- 操作: 'set_permissions'
- 允许: '1'(假设您的管理员角色/组ID为1)
- 拒绝: 空白
添加新的Acos及其权限
要添加新的Acos及其权限,请向acl_permissions表添加与您的新的对象匹配的行。请参见上面的列定义。
运行权限设置代码
导航到[yoursite]/[controller_name]/acl_permission/acl_permissions/set_permissions
完成后,它将重定向到您的网站路由,并显示成功消息。
缺少什么?
尚未进行测试,但将会进行。
即将到来的是什么?
- 一些视图,用于显示和更改您想要设置的权限
- 一个“逆向工程”功能,可以从您的acos和aros_acos表中提取行,并转换为易于消化的平面格式
- 一个“完全重建”选项,以便根据您的新权限清除并重新构建acos和aros_acos表