Yii授权之基于角色的存取控制 (RBAC)-php教程

资源魔 31 0

一:根本概念

脚色是 权限 的荟萃 (例如:建贴、改贴)。一个脚色 能够指派给一个或许多个用户。要反省某用户能否有一个特定的权限, 零碎会反省该蕴含该权限的脚色能否指派给了该用户。

能够用一个规定 rule 与一个脚色或许权限联系关系。一个规定用一段代码代表, 规定的执行是正在反省一个用户能否餍足这个脚色或许权限时进行的。例如,"改帖" 的权限 能够应用一个反省该用户能否是帖子的创立者的规定。权限反省中,假如该用户 没有是帖子创立者,那末他(她)将被以为没有具备 "改帖"的权限。

脚色以及权限均可以按条理组织。特定状况下,一个脚色可能由其余脚色或权限形成, 而权限又由其余的权限形成。Yii 完成了所谓的 部分程序 的条理构造,蕴含更多的特定的 树 的条理。 一个脚色能够蕴含一个权限,反之则没有行。(译者注:可了解为脚色正在上方,权限正在下方,从上到下假如碰着权限那末再往下不克不及呈现脚色)

二:设置装备摆设 RBAC

正在开端界说受权数据以及执行存取反省以前,需求先设置装备摆设使用组件 yiibaseApplication::authManager 。 Yii 提供了两套受权治理器: yiirbacPhpManager 以及 yiirbacDbManager。前者应用 PHP 剧本寄存受权数据, 然后者应用数据库寄存受权数据。 假如你的使用没有要求年夜量的静态脚色以及权限治理, 你能够思考应用前者

1:应用yiirbacPhpManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

设置装备摆设实现之后你就能够经过Yii::$app->authManager来拜访 authManager

yiirbacPhpManager 默许将 RBAC 数据保留正在 @app/rbac 目次下的文件中。 假如权限条理数据正在运转时会被修正,需确保WEB效劳器过程对该目次以及此中的文件有写权限。

2:应用yiirbacDbManager

(1)设置装备摆设yiirbacDbManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // unco妹妹ent if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

这里留意:

假如你应用的是Yii的根底模板的话,下面的设置装备摆设你需求正在config/console.php以及config/web.php文件中都进行设置装备摆设,假如你是Yii的初级模板的话,只要要正在co妹妹on/config/main.php文件中设置装备摆设一次就能够了

(2)天生所需求的权限表

应用yiirbacDbManager的话,需求天生4个数据库表寄存权限数据(他们都有默许表名,假如你需求修正表名的话,正在设置装备摆设yiirbacDbManager时进行修正)

itemTable: 该表寄存受权条款(译者注:即脚色以及权限)。默许表名为 "auth_item" 。
itemChildTable: 该表寄存受权条款的条理关系。默许表名为 "auth_item_child"。
assignmentTable: 该表寄存受权条款对用户的指派状况。默许表名为 "auth_assignment"。
ruleTable: 该表寄存规定。默许表名为 "auth_rule"。

正在名目目次执行

yii migrate --migrationPath=@yii/rbac/migrations

执行下面的饬令后,这时候候正在咱们的数据库中就会天生上述所说的四个表了

409535279-5d1723803767d_articlex.png

假如你没有细化应用饬令天生数据库的话,你能够将vendoryiisoftyii2rbacmigrationsschema-mysql.sql 的内容拷贝外面到数据库运转天生数据表

天生对应的权限表之后,这时候候咱们就能够应用Yii::$app->authManager来拜访 authManager

三:建设受权数据

1:增加(创立)权限(正在auth_item表中天生权限数据,type为2示意权限)

$auth = Yii::$app->authManager;// 增加 "createPost" 权限$createPost = $auth->createPermission('createPost');
$createPost->description = '创立了createPost权限';
$auth->add($createPost);

2:创立脚色(正在auth_item表中天生脚色数据,type为1示意脚色)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '创立了author脚色';
$auth->add($role);

3:给脚色付与权限

(1)给脚色付与指定权限

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//创立权限工具
$role = $auth->createRole('author');//创立脚色工具
$auth->addChild($role, $createPost); //增加对应关系(给author脚色增加createPost权限)

(2)给脚色付与指定脚色的一切权限

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//创立脚色工具
$role2 = $auth->createRole('author2');//创立权限工具
$auth->addChild($role1, $role2); //增加对应关系(给author1脚色增加author2脚色一切权限)

4:给用户调配脚色

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//创立脚色工具$auth->assign($role, 1); #1是IdentityInterface::getId()前往的id,及用户表的id

四:验证权限

\Yii::$app->user->can($action) #$action示意权限\Yii::$app->user->can('createPost') #判别用户能否具备createPost权限

猎取用户所属脚色

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

猎取用户所属权限

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

下面就是基于脚色的存取管制 (RBAC)简略理解,具体可参考Yii的民间文档

以上就是Yii受权之基于脚色的存取管制 (RBAC)的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 Yii

抱歉,评论功能暂时关闭!