## 呆错权限组件
* 呆错权限组件基于数据表dc_op进行开发,不支持表单扩展。
* 呆错权限组件可以理解为验证URL请求操作条件,如(admin/index/index),可以定义到URL参数。
* 呆错权限组件是通过将用户角色(用户组)拥有的访问节点保存在数据库中,在插件开发时需要对用户的访问请求权力限制时进行验证。
* 呆错权限组件支持给某一个用户单独添加任意节点,只需编辑该用户资料时添加相应节点即可。
* 助手函数与常用公用类库提供的方法适用于自行开发或封装模板调用标签等。
* 点此查看呆错官方提供的呆错权限组件[开发实例](https://www.daicuo.org/help/66)。
## 后台
* 可以直接通过 (网站后台 > 系统 > 权限管理)对网站操作的权限进行统一管理。
## 前台
* 需要继承前台基础类库后才能获取当前用户所拥有的权限节点列表以及使用验证方法。
* 角色组的查询、升级、删除等基本需要配合呆错用户组件、呆错权限组件。
## 使用方法
* 框架控制器基类 apps/common/Base.php 提供 _authCheck 方法验证,在继承了基类控制器后,只需在控制器里定义权限验证属性后调用验证方法即可,以Admin后台模块为例:
* 如果没有继承基类控制器,则可以通过 \daicuo\Auth::check 方法 或 助手函数 DcAuthCheck 手动验证。
```
class Admin extends Base
{
// 系统权限属性
protected $auth = [
'check' => true,//是否开启权限验证,默认为false
'rule' => '',//自定义验证规则,留空则使用默认规则(模块名/控制器名/操作名)
'none_login' => ['admin/index/login','admin/index/logout'],//不需要登录的方法(自然就不需要鉴权)
'none_right' => [],//需要登录但不需要鉴权的节点
'error_login' => 'admin/index/login',//未登录时回跳路径
'error_right' => '',//未取得权限时回跳路径
];
/**
* 继承初始化方法
*/
public function _initialize()
{
// 继承上级
parent::_initialize();
// 权限验证
$this->_authCheck();
}
}
```
## 权限验证实例
```
//定义验证规则
$this->site['auth_rule'] = $this->site['module'].'/'.$this->site['controll'].'/'.$this->site['action'];
//定义用户拥有的角色或权限节点
$this->site['user']['user_capabilities'] = ['guest'];
//通过Auth模块的Check方法验证
if(false == \daicuo\Auth::check($this->site['auth_rule'], $this->site['user']['user_capabilities']) ){
$this->error(lang('not_authorized'));
}
```
## 全局配置实例
```
'user_roles' => [
//游客拥有两个访问权限
'guest' => [
'admin/index/login',
'admin/index/logout',
],
//管理员拥有全部权限
'administrator' => [
'*',
],
//动态节点内置专用角色名(不会出现在角色名列表内)
'caps' => [
'index/index/index',
],
];
```
## 扩展角色实例
```
//方法1:增加一个test的用户组并且拥有三个节点权限
config('user_roles.test',[
'test/index/index',
'test/index/create',
'test/index/save',
]);
//方法2:批量增加test用户组的权限关系(推荐)
\daicuo\Op::write([
'test' => 'index/demo/testa',
'test' => 'index/demo/testb',
],'common','system','auth','0','no');
```
## 注册节点实例
```
//方法1:将任意节点注册到系统的专用角色(caps)名下,需要时可以给用户单独使用
$caps = array_merge(config('user_roles.caps'),[
'test/index/index',
'test/index/logout',
'test/addon/index?action=index',
]);
config('user_roles.caps',$caps);
//方法2:用户表增加自定义字段user_caps并保存对应的权限节点即可,因为框架的基类验证方法已预埋了此字段。
if ( false == \daicuo\Auth::check($this->auth['rule'], $this->site['user']['user_capabilities'], $this->site['user']['user_caps']) ) {
$this->error('error');
}
```
## 常用方法
* model('common/Auth','loglic')->write($post=[])
* model('common/Auth','loglic')->delete($args=[])
* model('common/Auth','loglic')->get($args=[])
* model('common/Auth','loglic')->select($args=[])
* model('common/Auth','loglic')->install($args=[])
* model('common/Auth','loglic')->unInstall($args=[])
## **助手函数**
* DcAuthConfig 获取系统已配置的角色与权限对应关系
* DcAuthOption 获取权限列表keyValue数组格式