classoutfit/acl-permission

一段非常简单的 CakePHP Acl 代码,用于获取新或现有 Acos 的权限,如果需要则创建它们,然后设置权限。

安装: 161

依赖项: 0

建议者: 0

安全性: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:cakephp-plugin

1.1 2016-09-24 19:29 UTC

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表