Smart Rbac Manager for Yii2
項目地址:https://github.com/rockyfc/yii2-smart-rbac
本應用建立在Yii2的數據結構基礎之上,使用之前請先安裝yii2框架的rbac推薦的數據表。
網上提供的rbac功能界面理解起來有一定的難度,所以在項目中開發中重寫了一套
RBAC。并把它分享出來。
其中包括四個模塊:
- Action管理
- 角色管理
- 菜單管理
- 用戶授權管理
在開發過程中,為了使用戶能方便快速的的進行二次開發,基本代碼層次和架構均同yii2框架的Module
書寫方法,代碼主體代碼用gii生成。并且未對view層做過多修飾,必要時可自行調整。
安裝方法
推薦使用 composer 安裝
或者運行以下命令
php composer.phar require --prefer-dist rockyfc/yii2-smart-rbac "*"
或者將以下代碼寫進你的composer.json
文件中執行
"rockyfc/yii2-smart-rbac": "*"
使用方法
將以下代碼添加到你的配置文件中
//權限管理組件
'components' => [
...其他組件
"authManager" => [
// yii\rbac\DbManager的增強版
"class" => 'smart\rbac\components\DbManager',
"defaultRoles" => ["guest"],
//菜單表名稱
"menuTable" => 'menu',
//可以綁定角色的用戶表名稱
"userTable" => 'user',
],
...其他組件
]
"modules" => [
'rbac' => [
'class' => 'smart\rbac\Module',
//有些Module你并不想添加權限判斷,則把它過濾掉
'skipOn' => ['debug','gii'],
],
]
請將菜單表導入數據庫(表名稱可自定義)
CREATE TABLE `menu` (
`menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜單ID',
`parent_id` int(11) DEFAULT NULL COMMENT '上級菜單',
`menu_name` varchar(50) NOT NULL COMMENT '菜單名稱',
`url` varchar(300) NOT NULL DEFAULT '' COMMENT '鏈接地址',
`icon` varchar(100) DEFAULT NULL COMMENT '菜單icon圖',
`create_at` int(11) DEFAULT NULL COMMENT '創建時間',
`update_at` int(11) NOT NULL COMMENT '更新時間',
`action_id` varchar(100) DEFAULT NULL COMMENT '當前菜單關聯的actionId',
`order_by` int(11) NOT NULL DEFAULT '0' COMMENT '排序值,越大越靠前',
`status` int(1) NOT NULL DEFAULT '2' COMMENT '是否可用1:不可用 2:可用',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='菜單管理表';
我們將 @vendor\yiisoft\yii2\rbac\migrations\schema-mysql.sql
文件導入數據庫,或者通過可視化管理工具、手動等方式創建改文件中的數據表。
訪問方法
- 訪問ction列表 http://xxxx.com/rbac/rbac/action/index
- 訪問Menu列表 http://xxxx.com/rbac/rbac/menu/index
- 訪問用戶列表 http://xxxx.com/rbac/rbac/user/index
- 訪問角色列表 http://xxxx.com/rbac/rbac/role/index
@title標簽的使用
當你訪問action列表的時候,如果"描述"列直接顯示Action不夠直觀的話,可以在編寫controller的時候給class和function的注釋加上@title標簽,重新"刷新"action列表就可以看到中文了。
/**
*
* @title 這里填寫Controller標題
*/
class UserController extends Controller{
/**
* @title 這是action標題
*/
public function actionIndex()
{
...
}
}
你也可以給Module class添加@title
,方法同上。