yii2-admin是yii2 rbac的一套管理工具,實現了漂亮的界面和完整的權限管理功能,不用本身再去寫權限代碼了,使用以前請將yii2的源碼更新到最新版本.php
git源碼地址:https://github.com/mdmsoft/yii2-admingit
安裝yii2-admin:github
一、首先切換到項目目錄下web
二、執行該語句:composer.phar require mdmsoft/yii2-adminsql
注:若是提示could not open input file composer.phar數據庫
請先執行下面兩條語句bootstrap
composer self-update
composer install --prefer-dist數組
三、composer完成後在項目下的配置文件中加入下列配置項yii2
'aliases' => [ '@mdm/admin' => '$PATH\yii2-admin-1.0.3', ], 'modules' => [ 'admin' => [ 'class' => 'mdm\admin\Module', 'layout' => 'left-menu', // it can be '@path/to/your/layout'. /**/ 'controllerMap' => [ 'assignment' => [ 'class' => 'mdm\admin\controllers\AssignmentController', 'userClassName' => 'app\models\User', 'idField' => 'id' ] ], 'menus' => [ 'assignment' => [ 'label' => 'Grand Access' // change label ], //'route' => null, // disable menu route ] ], 'debug' => [ 'class' => 'yii\debug\Module', ], ],
components數組中加入authManager組件,有PhpManager和DbManager兩種方式,PhpManager將權限關係保存在文件裏,這裏使用的是DbManager方式,將權限關係保存在數據庫. 'authManager' => [ 'class' => 'yii\rbac\DbManager', // or use 'yii\rbac\DbManager' ], 'i18n' => [ 'translations' => [ '*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', // if advanced application, set @frontend/messages 'sourceLanguage' => 'en', 'fileMap' => [ //'main' => 'main.php', ], ], ], ],
4.命令行切換到yii2目錄,執行下面命令,建立rbac須要的表(需自行建立數據庫,庫名默認yii2basic)
yii migrate --migrationPath=@yii/rbac/migrations
yii migrate --migrationPath=@mdm/admin/migrations (建立menu導航菜單表),若是發生錯誤能夠將migrations中的sql文件移動到@yii/rbac/migrations目錄下生成表
上面的命令使用的yii2框架的cli模式,因此須要將上面的配置,在console.php中也寫一份,這個你們看錯誤提示就知道了.app
反正這步我是沒有執行成功的,這步的目的是在數據庫裏生成下面5個表:
menu
auth_rule //規則,規則類名
auth_item_child //角色對應的權限,parent角色,child權限名
auth_item //角色|權限表,type=1角色,type=2權限
auth_assignment //角色與用戶對應關係表
我經過下面SQL語句直接生成這5個表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for yc_menu -- ---------------------------- DROP TABLE IF EXISTS `yc_menu`; CREATE TABLE `yc_menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) NOT NULL, `parent` int(11) DEFAULT NULL, `route` varchar(256) DEFAULT NULL, `order` int(11) DEFAULT NULL, `data` text, PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `name` (`name`), KEY `route` (`route`(255)), KEY `order` (`order`), CONSTRAINT `dh_menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `dh_menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='系統管理員菜單權限表\r\n'; DROP TABLE IF EXISTS `yc_auth_rule`; CREATE TABLE `yc_auth_rule` ( `name` varchar(64) NOT NULL, `data` text, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`name`), KEY `name` (`name`), KEY `created_at` (`created_at`), KEY `updated_at` (`updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理員權限規則表'; DROP TABLE IF EXISTS `yc_auth_item_child`; CREATE TABLE `yc_auth_item_child` ( `parent` varchar(64) NOT NULL, `child` varchar(64) NOT NULL, PRIMARY KEY (`parent`,`child`), KEY `child` (`child`), KEY `parent` (`parent`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理員權限關係表'; DROP TABLE IF EXISTS `yc_auth_item`; CREATE TABLE `yc_auth_item` ( `name` varchar(64) NOT NULL, `type` int(11) NOT NULL, `description` text, `rule_name` varchar(64) DEFAULT NULL, `data` text, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`name`), KEY `rule_name` (`rule_name`), KEY `type` (`type`), KEY `name` (`name`), KEY `created_at` (`created_at`), CONSTRAINT `yc_auth_item_ibfk_2` FOREIGN KEY (`rule_name`) REFERENCES `yc_auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理權權限條目'; DROP TABLE IF EXISTS `yc_auth_assignment`; CREATE TABLE `yc_auth_assignment` ( `item_name` varchar(64) NOT NULL, `user_id` varchar(64) NOT NULL, `created_at` int(11) DEFAULT NULL, PRIMARY KEY (`item_name`,`user_id`), KEY `user_id` (`user_id`), KEY `created_at` (`created_at`), KEY `item_name` (`item_name`), CONSTRAINT `yc_auth_assignment_ibfk_2` FOREIGN KEY (`item_name`) REFERENCES `yc_auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理員受權表';
5.訪問管理界面,http://localhost/admin,這時因爲沒有數據,會報錯,咱們須要添加用戶表user
個人字段是這樣的,只需存在user_id便可,其餘字段根據須要自行增減
CREATE TABLE `user` ( `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(16) DEFAULT NULL, `password` varchar(32) DEFAULT NULL, `realname` varchar(32) DEFAULT NULL, `email` varchar(32) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
這是訪問可能還會報錯,由於咱們沒有實現驗證類,在配置文件web.php中的components加入user項
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ],
這裏的app\models\User是咱們實現的驗證類,你能夠隨便取名
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface 這個類需實現IdentityInterface接口中的5個函數,必須實現的有2個方法 findIdentity($id) //根據id查詢用戶信息 getId() //獲取用戶id
到這裏,基本就完成了,訪問http://localhost/admin,便可看到管理界面
6.使用
1)修改導航菜單模板主視圖文件 views/layouts/main.php
use mdm\admin\components\MenuHelper; use yii\bootstrap\Nav; echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right nav-pills '], #修改使用yii2-admin的菜單控制項 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id), ]);
2)進入yii2-admin的目錄,vi components/MenuHelper.php
public static function getAssignedMenu($userId, $root = null, $callback = null, $refresh = true) 將$refresh改成true
3)添加導航菜,建立RULE, 建立角色
https://github.com/mdmsoft/yii2-admin/blob/master/docs/guide/basic-usage.md
建立RULE時,必須寫一個類並繼承yii\rbac\Rule,而且實現其抽象方法。