下面介绍一个 yii2 的 Rbac 权限管理设置,闲话少说,直接上代码,

1、首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main.php)。

'authManager' => [
'class' => 'yii\rbac\DbManager',
'itemTable' => 'auth_item',
'assignmentTable' => 'auth_assignment',
'itemChildTable' => 'auth_item_child',
],
当然,在配置里面也可以设置 默认角色,只是我没写。Rbac 支持两种类,PhpManager 和 DbManager ,这里我使用 DbManager 。

yii migrate --migrationPath=@yii/rbac/migrations/ 运行此命令生成权限数据表

2、配置完毕,下面我们尝试着创建一个 许可 Permiassion,代码如下

// 创建许可
public function createPermission($item)
{
$auth = Yii::$app->authManager;

$createPost = $auth->createPermission($item);
$createPost->description = '创建了 ' . $item . ' 许可';
$auth->add($createPost);
}

3、好的,许可我们就创建完成了,下面我们创建一个 角色吧 roles

// 创建角色
public function createRole($item)
{
$auth = Yii::$app->authManager;

$role = $auth->createRole($item);
$role->description = '创建了 ' . $item . ' 角色';
$auth->add($role);
}

4、好的,就是这么简单,不要激动,下面更简单,给角色分配许可,上代码

// 为角色分配许可
public function createEmpowerment($items)
{
$auth = Yii::$app->authManager;

$parent = $auth->createRole($items['name']);
$child = $auth->createPermission($items['description']);

$auth->addChild($parent, $child);
}

5、好的,分配许可也创建完成了,我操,太尼玛简单了,继续上代码,给角色分配用户

// 给用户分配角色
public function assign($item)
{
$auth = Yii::$app->authManager;
$reader = $auth->createRole($item['name']);
$auth->assign($reader, $item['description']);
}

6、好的好的,就是这么简单,我自己都他妈不敢相信啊,你相信吗???最后一步,验证用户是否有权限

public function beforeAction($action)
{
$action = Yii::$app->controller->action->id;
if(\Yii::$app->user->can($action)){
return true;
}else{
throw new \yii\web\UnauthorizedHttpException('对不起,您现在还没获此操作的权限');
}
}

好了,一口气都他妈写完了,老爽了。当然,可以创建就一定可以修改和删除,修改和删除都是多表关联操作的, Yii也为我写好了方法,当然你也可以自己去写,都是小意思了。

数据库sql文件地址 /vendor/yiisoft/yii2/rbac

最新文章

  1. MySQL数据库索引的设计原则
  2. CuteSTL——跟着感觉造轮子
  3. C++设计模式——简单工厂模式
  4. jquery插件-表单验证插件
  5. apistore接口调用demo
  6. iar 错误解决
  7. jsp标签之<%%>和<%!%>
  8. LeetCode OJ 75. Sort Colors
  9. Emmet插件详解
  10. HTML5最佳实践web app
  11. TT-付款方式
  12. 使用Calendar获取上一月,下一月,上一年,下一年的当天日期
  13. CMMI三个过程域的流程及达到特定目标、共性目标的要求(RD需求管理过程,PI产品集成过程,TS技术解决方案)
  14. svn conflict问题解决办法
  15. 修改ssh远程默认端口
  16. C++笔试易错题集(持续更新)
  17. js new Date() 获取时间
  18. ORACLE数据泵还原(IMPDP命令)
  19. BZOJ 2330 SCOI2011糖果 差分约束
  20. django的表与表之间的关系详细讲解

热门文章

  1. OncePerRequestFilter的作用
  2. spark collect获取所有元素
  3. elasticsearch配置详解
  4. js数组去重的几种方法
  5. POJ 2263 最短路Floyd_warshall算法
  6. pip install flask 安装失败
  7. 基于GUI的简单聊天室01
  8. 玩转X-CTR100 l STM32F4 l 舵机控制
  9. SharePoint场管理-PowerShell(一)
  10. 第一次做Java程序注意事项