在 Yii2 高级版中,使用 RBAC(基于角色的访问控制)来管理权限。RBAC 的核心思想是将权限授予角色,然后将角色授予用户。用户通过拥有角色权限来获得相应的权限。 在 Yii2 中,使用 RBAC 权限管理需要创建以下两个数据库表: ### 1. auth_item 表 auth_item 表用于存储权限项。权限项可以是角色或权限。 auth_item 表的字段定义如下: - name:权限项的名称,必须是唯一的。 - type:权限项的类型,可以是 1(角色)或 2(权限)。 - description:权限项的描述。 - rule_name:规则名称。 - data:权限项的数据。 - created_at:创建时间。 - updated_at:更新时间。 ### 2. auth_assignment 表 auth_assignment 表用于存储用户和角色之间的关系。 auth_assignment 表的字段定义如下: - item_name:角色名称。 - user_id:用户 ID。 - created_at:创建时间。 以上两个表是 RBAC 权限管理的核心所在。当用户访问某个资源时,Yii2 会根据用户的角色来检查用户是否有访问该资源的权限。具体的实现原理如下: ### 1. 创建权限项 在 Yii2 中,权限项分为两种类型:角色和权限。角色是一组权限的集合,而权限是单一的权限。 我们可以使用 yii\rbac\DbManager 组件来创建权限项。例如,要创建一个名为 admin 的角色,可以使用以下代码: ```php $auth = Yii::$app->authManager; $role = $auth->createRole('admin'); $role->description = 'Admin'; $auth->add($role); ``` 上面的代码中,我们首先获取 authManager 组件,然后使用 createRole 方法创建一个名为 admin 的角色。我们可以使用 description 属性为角色添加一些描述。最后,我们使用 add 方法将角色添加到权限管理器中。 创建权限也是类似的。例如,要创建一个名为 createPost 的权限,可以使用以下代码: ```php $auth = Yii::$app->authManager; $permission = $auth->createPermission('createPost'); $permission->description = 'Create Post'; $auth->add($permission); ``` ### 2. 分配权限 在将权限授予用户之前,我们需要将权限分配给角色。我们可以使用 addChild 方法将权限分配给角色。例如,要将 createPost 权限分配给 admin 角色,可以使用以下代码: ```php $auth = Yii::$app->authManager; $role = $auth->getRole('admin'); $permission = $auth->getPermission('createPost'); $auth->addChild($role, $permission); ``` 上面的代码中,我们首先获取 admin 角色和 createPost 权限。然后,我们使用 addChild 方法将权限分配给角色。 ### 3. 分配角色给用户 最后,我们需要将角色分配给用户。我们可以使用 assign 方法将角色分配给用户。例如,要将 admin 角色分配给用户 ID 为 1 的用户,可以使用以下代码: ```php $auth = Yii::$app->authManager; $role = $auth->getRole('admin'); $auth->assign($role, 1); ``` 上面的代码中,我们首先获取 admin 角色。然后,我们使用 assign 方法将角色分配给用户 ID 为 1 的用户。 总的来说,RBAC 的实现原理就是将权限授予角色,然后将角色授予用户。当用户访问某个资源时,Yii2 会根据用户的角色来检查用户是否有访问该资源的权限。