abreu1234 / acl
CakePHP的Acl插件
Requires
- php: >=5.4.16
- cakephp/cakephp: ~3.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-10-02 11:42:15 UTC
README
一个用于管理CakePHP应用程序中ACL的插件。
插件处于开发初期,我刚开始使用CakePHP不久,请发送建议和建设性的批评。
通过composer安装
您可以使用composer composer 安装此插件。在您的 composer.json
文件中添加以下依赖项
"require": { "abreu1234/acl": "dev-master" }
现在在您的终端中运行 php composer.phar update
通过在 config\bootstrap.php
中添加以下行来加载插件
Plugin::load('Acl', ['bootstrap' => false, 'routes' => true]);
创建表
要使用 Migrations
创建插件所需的表,请在您的终端中运行以下命令
bin/cake migrations migrate -p Acl
加载Auth扩展
您应该启动cakephp的 Auth
扩展
基本配置
要加载扩展,您必须在您的应用程序的 Controller\AppController.php
中添加您的用户控制器名称
$this->loadComponent('Acl.Acl', ['controllers' =>['user'=>'Users']]);
如果您使用组,还需要添加组控制器的名称
$this->loadComponent('Acl.Acl', ['controllers' =>['user'=>'Users','group'=>'Groups']]);
同步插件控制器
要同步插件控制器,只需在 plugins
索引中添加配置即可
$this->loadComponent('Acl.Acl', [ 'controllers' =>['user'=>'Users','group'=>'Groups'], 'plugins' => ['PluginName'] ] );
默认情况下,此插件将同步控制器
忽略文件夹和文件
要忽略同步过程中的某些文件夹或文件,请添加具有以下语法的 ignore
索引配置:Prefixo->Pasta/Arquivo->Action
。要忽略所有前缀或前缀的文件夹,请添加 *
$this->loadComponent('Acl.Acl', [ 'controllers' =>['user'=>'Users','group'=>'Groups'], 'plugins' => ['PluginName'], 'ignore' => [ '*' => [ '.','..','Component','AppController.php','empty', '*' => ['beforeFilter', 'afterFilter', 'initialize'], 'Permission' => ['add'] ], 'Admin' => [ 'Users' => ['delete'] ] ] ]);
赋予权限
要为某个控制器赋予权限而不需要数据库,请添加以下行。
$this->loadComponent('Acl.Acl', [ 'authorize' => [ '/' => [ 'Users' => ['index'], ] ], 'controllers' =>['user'=>'Users'] ]);
使用以下语法的 authorize
索引:Prefixo->Controller->Action
。在上面的例子中,我们正在为Controller User
和 Action index
赋予权限。对于无前缀的应用程序根目录,请使用 /
如果需要在前缀内部授权控制器,请使用前缀名称作为 /
之后的部分
$this->loadComponent('Acl.Acl', [ 'authorize' => [ '/' => [ 'Users' => ['index'], ], '/Admin' => [ 'Users' => ['add'], ] ], 'controllers' =>['user'=>'Users'] ]);
在上面的例子中,我们正在为前缀 Admin
内部的Controller User
和 Action add
赋予权限
如果需要授权插件,请使用以下语法:Plugin.Prefix
user /
以授权插件的根目录
$this->loadComponent('Acl.Acl', [ 'authorize' => [ '/' => [ 'Users' => ['index'], ], '/Admin' => [ 'Users' => ['add'], ], 'Acl./' => [ 'Permission' => ['index','synchronize'], 'UserGroupPermission' => ['index','getPermission','addAjax'] ], ], 'controllers' =>['user'=>'Users'] ]);
上面的例子中,出于安全考虑,请仅在您为某个用户或组添加了权限后使用。删除这些行之后
'Acl./' => [ 'Permission' => ['index','synchronize'], 'UserGroupPermission' => ['index','getPermission','addAjax'] ],
isAuthorized方法
为了验证用户或组,请使用Auth扩展的isAuthorized方法。在 AppController.php
文件中添加以下代码。
public function isAuthorized($user) { if(!$this->Acl->check()) { $this->Flash->error(__('User or group no access permission!')); return false; } return true; }
同步
要同步控制器和动作,请访问地址: /acl/permission
并点击同步链接。重要的是用户必须有访问controller Permission
和 Actions index
和 synchronize
的权限
管理权限
要管理用户或组的权限,请访问地址: /acl/user-group-permission
选择用户或组以及权限。要正常工作,用户必须已同步权限,并具有访问controller UserGroupPermission
和 Actions index
、getPermission
和 addAjax
的权限