Yii 2.0 RBAC 权限学习笔记 [ 2.0 版本 ]
下面介绍一个 yii2.0 的 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、好的,就是这么简单,不要激动,下面更简单,给角色分配许可,上代码
static public function createEmpowerment($items)
{
$auth = Yii::$app->authManager;
$parent = $auth->createRole($items['name']);
$child = $auth->createPermission($items['description']);
$auth->addChild($parent, $child);
}
5、好的,分配许可也创建完成了,我操,太尼玛简单了,继续上代码,给角色分配用户
static 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
lilongsy 山东济南
注册时间:2011-05-08
最后登录:2024-10-11
在线时长:130小时9分
最后登录:2024-10-11
在线时长:130小时9分
- 粉丝55
- 金钱22106
- 威望65
- 积分24056
共 15 条评论
学到了,有用!
你忘记了还有rule没讲,它才是rbac的亮点。
http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
这儿有具体方法。
@lilongsy 请问下createPermission...这些方法是写到什么地方呢?
@linkso 最简单的方法就是写到controller里。
@lilongsy 为什么用命令行模式 建表报错了
看上去很简单的样子,不过楼主明显有点二。
此文转发的,底部注有来源。
说实话,写的真不怎么样
说的感觉你写的很好是的
@小巫师 没你写的好。
做人要低调
一般的方法前面不都要加action吗
如果没有url访问的,可以不用加action。
@lilongsy public function createPermission($item)可是问题这个是怎么访问的,不用url,他这个是写控制器里面吗
@张三风 在控制器里,创建一下这个类的实例,然后调用他的这个方法就可以了。
你写的这些action 都需要自己创建一个Rbaccontroller 么
很明显 我都不知道$item参数是什么,能给个例子啊?
$item应该是角色或权限
很明显 我都不知道$item参数是什么?
楼主讲的是具体实现,我讲的是具体操作,带你完完全全的搭建rbac管理后台
很不错!可以考虑移到yiichina上面,哈哈
请问一下,我是先写的功能,后写的权限,这时候怎么管理现有的权限,并且后台可以分配?
$item 传的什么参数
mark,接下来用到了再看
怎么设定admin为超级管理员,任何控制器都不需要检查权限?
给楼主点赞!刚接触yii,先收藏,抽时间实践实践
$item 到底是什么
真是沙雕!
为了发这句话,特意注册了一个账号,我也很沙雕