yii2高级模板借助于yii2-admin&yii2-adminlte-asset的RBAC权限管理
确保composer正确安装及配置,参考以下命令:
执行composer self-update.确保你的composer是最新的
更新国内源
二、使用数据迁移命令,初始化RBAC数据库打开 common\config\main.php 文件;
在 components 数组中加入 authManager 组件,注意authManager的配置不要写错哦。
//authManager有PhpManager和DbManager两种方式,
//PhpManager将权限关系保存在文件里,这里使用的是DbManager方式,将权限关系保存在数据库.
'components' => [
’authManager’ => [
’class’ => 'yii\rbac\DbManager',
],
],
五、安装yii2-admin
yii2-admin是一个基于yii2的权限管理组件,使用它可以快速搭建可视化的权限管理功能;
首先创建yii2的rbac数据表,数据库迁移文件在vendor\yiisoft\yii2\rbac 目录下,
./yii migrate --migrationPath=@yii/rbac/migrations/
这个时候会生成四张表:
其中:auth_item:用于存储角色、权限和路由; auth_item_child:角色-权限的关联表; auth_assignment:用户-角色的关联表 auth_ruls 规则表
开始安装yii2-admin:
composer require mdmsoft/yii2-admin "~2.0"
安装好了之后,我们打开 backend\config\main.php,配置如下
return [
//......
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
],
//......
],
'aliases' => [
'@mdm/admin' => '@vendor/mdmsoft/yii2-admin',
],
'components' => [
//......
'authManager' => [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['guest'],
],
//......
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
//这里是允许访问的action,不受权限控制
//controller/action
//'*'
]
],
//......
];
现在,我们访问后台任何路由都显示 403 无权限访问,为了开发方便,暂时我们先设置所有都可访问
'allowActions' => [
//这里是允许访问的action,不受权限控制
//controller/action
'*'
]
可以通过下列url验证安装是否成功
/index.php?r=admin
/index.php?r=admin/route
/index.php?r=admin/permission
/index.php?r=admin/role
/index.php?r=admin/assignment
四、安装yii2-adminlte-asset
上面的是yii2-admin的权限管理界面了,但是这么访问太麻烦,我们可以做一个导航管理,让有权限的路由都显示在左侧菜单;
首先建立一个menu表,这个表在yii2中已经为我们准备好了,直接数据迁移:
./yii migrate/to m140602_111327_create_menu_table.php --migrationPath=@mdm/admin/migrations
./yii migrate/to m160312_050000_create_user.php --migrationPath=@mdm/admin/migrations
# m140602_111327_create_menu_table.php 是我们要执行的menu数据表,# 在vendor\mdmsoft\yii2-admin\migrations目录下,这个每个人可能是不同的,需要自己手动修改
composer require dmstr/yii2-adminlte-asset "2.*"
拷贝 vendor\dmstr\yii2-adminlte-asset\example-views\yiisoft\yii2-app 目录下面的文件到项目 backend\views, 可直接进行覆盖替换
七、使用数据库迁移工具,生成menu表
通过 /index.php?r=admin/menu 访问菜单创建
menu菜单使用方法
/admin/menu/index #这里添加导航菜单,之前先访问 /admin/menu/index将所有路由添加到表中,否则无法设置路由链接
例如:添加一个‘’角色管理‘’ 菜单,路由为 “/admin/role”
访问 /admin/menu 可以看到菜单管理界面;然后打开布局文件left.php,修改相应配置,
use mdm\admin\components\MenuHelper;
use dmstr\widgets\Menu;
?>
Menu::widget([
'options' => ['class' => 'sidebar-menu'],
'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id)
]);
?>
//路由设置
/admin/route/index #访问将左侧所有路由添加到右侧,即写入路由数据,这里的路由是根据php反射机制自动显示,也可手动增加路由
//权限设置
/admin/permission/index #添加一个权限,分配给一个路由,例如:“ 全局权限 ”,右侧加入 “ /* ”;
//角色设置
/admin/role/index #添加一个角色,分配给该角色一个权限,例如:“ 超级管理员 ”,右侧加入上一步设置的 “ 全局权限 ”;
//角色分配
/admin #分配给用户角色,这里会显示user表中所有用户,例如:“ admin ”,右侧加入上一步设置的角色 “ 超级管理员 ”;
可以通过以下代码创建控制器并访问。
namespace backend\controllers;
use Yii;
useyii\web\Controller;
class RbacController extends Controller
{
public function actionInit ()
{
$auth = Yii::$app->authManager;
//添加 "/*" 权限
$index = $auth->createPermission('/*');
$index->description = '超级管理员';
$auth->add($index);
// 创建一个角色 '超级管理员',并为该角色分配"/*"权限
$manage = $auth->createRole('超级管理员');
$auth->add($manage);
$auth->addChild($manage, $index);
// 为用户 admin(该用户的uid=1) 分配角色 "超级管理员" 权限
$auth->assign($manage, 1); // 1是admin用户的uid
}
}