权限管理
Acl
类依赖的数据表如下,请复制到mysql中执行。 语句中的pr_
为表前缀,请自行替换在实际的表前缀。
数据表说明
- pr_admin_group为用户组表
用来存储用户组相关信息。
- pr_admin_users为用户信息表
用来存储用户相关信息。一个用户可能属于多个用户组,比如某个用户同时属于id为 1、3的用户组。则用户表中的groupid字段存储的数据则为 1|3。多个组id以|分隔
- pr_admin_menu为菜单表
用来存储菜单相关信息。数据格式类似
url字段为访问的操作的地址
- pr_admin_access为权限关系表
用来存储权限相关信息。
修改配置
在配置文件中加入如下配置:'administratorid'=> 1, //超管理员id
<?php
use Cml\Vendor\Acl;
//判断用户名密码....登录是否成功
Acl::setEncryptKey('ffddsff');//配置加密key 这个最好在共公控制器的init方法/__construct方法里设置
Acl::setLoginStatus($user['id']); //设置某用户为登录判断
判断用户是否已登录以及是否有权限
<?php
use Cml\Vendor\Acl;
$menus = Acl::getMenus();//包含用户自有的权限、以及其所在用户组所拥有的权限
登出
<?php
use Cml\Vendor\Acl;
$isSuperUser = Acl::isSuperUser();
自定义表名
如果想要自定义表名可以如下操作:
Acl::setTableName([
'access' => 'admin_access',
'groups' => 'admin_groups',
'menus' => 'admin_menus',
'users' => 'admin_users',
]);
app
特殊说明
通常情况我们会建一个共用的控制器。在共用控制器的init
方法或__construct
方法里,验证用户是否登录以及是否拥有当前模块的访问权限。这时是所有对外的方法都会被验证。但是在实际项目中我们往往会想要跳过一些方法的权限校验,比如:
- 对方法注释 则不检查该方法的权限
比如有一个方法resume.想要跳过权限检查则注释如下即可
/**
- 恢复微博
- @noacl
/
public function resume()
- 对方法注释 web/User/add 则将当前方法的权限检查跳转为检查 web/User/add方法的权限
比如上面说的 user/save权限只要判断有无user/add或user/edit的权限就好了。
/**
- 保存用户信息
- @acljump user/add|user/edit
/
public function save()
参考相关章节