- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章yii2 RBAC使用DbManager实现后台权限判断的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了yii2 RBAC使用DbManager实现后台权限判断的方法。分享给大家供大家参考,具体如下:
首先根据文档生成yii2 框架中的表 。
yii migrate --migrationPath=@yii/rbac/migrations/ 。
生成如下4表:
auth_assignment auth_item_child auth_item auth_rule 。
使用yii的gii快速生成对应的model,但是由于auth_item表同时存储角色跟权限,由于后面我们要分角色跟权限来做curd操作,所以我这里新建了一个RoleForm和PermissionForm两个model来区分开角色与权限。由于角色跟权限紧紧相连,又在auth_item生成的model中多加一个属性$child,后面会用到现在先不管.
下面是角色model的相关代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
namespace
app\models;
use
Yii;
use
app\models\AuthItem;
use
yii\rbac\Item;
/*
* 角色model
* 指尖上的艺术家
*/
class
RoleForm
extends
AuthItem
{
public
function
init() {
parent::init();
$this
->type = Item::TYPE_ROLE;
//yii-rbac-Role隐藏继承常量这里的值是1
}
}
|
下面是权限model的相关代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
namespace
app\models;
use
Yii;
use
app\models\AuthItem;
use
yii\rbac\Item;
/*
* 权限model
* 指尖上的艺术家
*/
class
PermissionForm
extends
AuthItem
{
public
function
init() {
parent::init();
$this
->type = Item::TYPE_PERMISSION;
//常量值 2
}
}
|
另外在AuthItem模型中增加一个属性 。
1
2
3
4
|
<?php
class
AuthItem.....
public
$child
;
//用于角色权限添加
......
|
现在到我们对应的控制器了 。
首先我们说权限控制器写控制器的时候要用到系统自带的扩展 。。。 use yii\rbac\Permission; 。。.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/*
* 权限添加
*/
public
function
actionCreate() {
$model
=
new
PermissionForm();
if
(
$model
->load( Yii::
$app
->request->post() ) &&
$model
->validate() ) {
//rbac中permission对象
$permission
=
new
Permission();
$permission
->name = trim(
$model
->name );
$permission
->type =
$model
->type;
//权限添加
Yii::
$app
->authManager->add(
$permission
);
}
}
|
修改的时候 其他的不变就是换了个方法 。
1
2
3
4
5
|
/*
* param string $name 修改的权限名
* param Object $permission 跟添加一样提交上来的数据
*/
Yii::
$app
->authManager->update(
$name
,
$permission
);
|
这里是删除 。
1
2
3
4
|
//Returns the named permission.
$permission
= Yii::
$app
->authManager->getPermission(
$name
);
//Removes a permission or rule from the RBAC system.
Yii::
$app
->authManager->remove(
$permission
);
|
权限的cud都搞定了,查看就不写了 。
下面是角色控制器 。
带上这个 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
use
yii\rbac\Role;
/*
* 角色添加
*/
public
function
actionCreate() {
$model
=
new
RoleForm();
if
(
$model
->load( Yii::
$app
->request->post() ) &&
$model
->validate() ) {
//实例化角色对象
$role
=
new
Role();
$role
->name =
$model
->name;
$role
->type =
$model
->type;
//添加角色
Yii::
$app
->authManager->add(
$role
);
}
//权限列表( 添加角色的时候我们就可看到当前有没有权限来添加 )
$permissions
=
$this
->loadPermission();
//将$model跟$permissions....渲染到视图就好了
}
|
1
2
3
4
5
6
|
/*
* 修改
* param string $name 修改的角色名
* param Object $role 跟添加一样提交上来的数据
*/
$bool
= Yii::
$app
->authManager->update(
$name
,
$role
);
|
删除的时候就比较麻烦了 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/*
* param string $name 角色名
*/
$role
= Yii::
$app
->authManager->getRole(
$name
);
//获取当前角色对象
//Returns the child roles.
$childAll
= Yii::
$app
->authManager->getChildren(
$role
);
if
( isset(
$childAll
) ) {
//逐一删除权限
foreach
(
$childAll
as
$value
) {
//Returns the named permission.
$perObj
= Yii::
$app
->authManager->getPermission(
$value
);
//Removes a child from its parent.
Yii::
$app
->authManager->removeChild(
$role
,
$perObj
);
}
}
Yii::
$app
->authManager->remove(
$role
);
//最后删除我们的角色了
|
最最关键的就是我们要给角色赋予权限对吧,如下代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
//当前角色所拥有的权限
$childArray
=
$this
->loadRolePermission(
$model
->name );
//这个就是返回权限数组
if
( !
empty
(
$childArray
) ) {
$model
->child =
$childArray
;
}
else
{
$model
->child =
array
();
}
//Returns all permissions in the system.
$permissions
= Yii::
$app
->authManager->getPermissions();
$perArr
=
array
();
foreach
(
$permissions
as
$key
=>
$value
) {
$perArr
[
$value
->name] =
$value
->name;
}
if
(
$model
->load( Yii::
$app
->request->post() ) &&
$model
->validate() ) {
//角色对象
$child
= isset(
$_POST
[
'AuthItem'
][
'child'
] ) ?
$_POST
[
'AuthItem'
][
'child'
] : NULL;
//表单无法验证child所以当为空的时候跳回原页面
if
(
empty
(
$child
) ) {
return
$this
->redirect(..你们要跳的页面..);
}
//判断角色是否分配权限,已分配则删除,反之增加新的
if
( !
empty
(
$childArray
) ) {
//Removed all children form their parent.
$bool
= Yii::
$app
->authManager->removeChildren(
$model
);
if
( !
$bool
) {
throw
new
HttpException(404,
'别想糊弄我!凑你一脸~~~'
);
}
}
//当前角色对象
$role
= Yii::
$app
->authManager->getRole(
$model
->name );
//child权限添加
if
( isset(
$child
) ) {
foreach
(
$child
as
$val
) {
//获取权限
$childObj
= Yii::
$app
->authManager->getPermission(
$val
);
//给item_child表写入数据(权限表)
Yii::
$app
->authManager->addChild(
$role
,
$childObj
);
}
return
$this
->redirect(..你们要跳的页面..);
}
}
|
最后就是我们最后一个控制器了角色与用户关联 。
1
2
3
4
5
6
7
8
9
10
11
12
|
/*
* 创建角色跟用户之间关联的关键部分代码
*/
//Returns the named role.
$role
=Yii::
$app
->authManager->getRole(
$roleName
);
// Assigns a role to a user.
Yii::
$app
->authManager->assign(
$role
,
$userId
);<pre name=
"code"
class
=
"php"
>
/*
* 权限检测
* param int| string $userId 用户id
* param string $permission 权限名
*/
Yii::
$app
->authManager->checkAccess(
$userId
,
$permission
) )
|
下面是判断权限的 。
1
2
3
4
5
6
|
/*
* 权限检测
* param int| string $userId 用户id
* param string $permission 权限名
*/
Yii::
$app
->authManager->checkAccess(
$userId
,
$permission
) )
|
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助.
最后此篇关于yii2 RBAC使用DbManager实现后台权限判断的方法的文章就讲到这里了,如果你想了解更多关于yii2 RBAC使用DbManager实现后台权限判断的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个虚拟数据管理器,它将用 SQLite 数据库的内容填充 ArrayList。当我尝试创建数据库对象时,出现错误,指出无法从静态上下文引用“com.example.listview.manage
我是 iOS 开发新手。这是小型餐厅类型的应用程序。根据餐厅的不同,它会填充促销信息。到目前为止,我已经完成了所有这些工作,并在 viewdidLoad 方法中获取了升级到数组的列表。 if (!db
尝试为 Yii2 设置 DbManager。有很多关于 php 版本的线程,但是,关于 DB 版本的线程不多。 我所知道的: 第一步:迁移脚本 ./yii migrate --migrationPat
是否有一个工具可以为 SQL 中的简单数据库创建 DBManager 类?我想将它与 netbeans 一起使用。我正在做一个简单的家庭作业数据挖掘项目。但我厌倦了自己编写 DBManager。我非常
如何获取Yii2中特定角色的用户和RBAC中的DbManager? 请介绍一些用于用户管理和角色管理的API。 我搜索并阅读了 Yii2 guide但我没有找到任何解决方案。 最佳答案 从 Yii 2
WordPress 3.5.1 WP-DBManager 2.63 数据库类型 MYSQL 数据库版本 v5.1.68-cll 尝试使用 WP-DBManager 在数据库中为 WordPress 站
我是一名优秀的程序员,十分优秀!