yii2-admin 插件使用简要教程 [ 2.0 版本 ]
yii2的访问权限默认是由自带的rbac组件在管理,需要自己编写相应的规则去实现权限管理,无图形界面。
yii2-admin是将rbac的管理可视化,只需要点几下鼠标就能设置好简单的规则。
本教程中软件版本及链接:yii2(v2.06,使用高级模板),yii2-admin(2.0)
yii2:https://github.com/yiisoft/yii2
yii2-admin:https://github.com/mdmsoft/yii2-admin
本文未涉及自定义规则
和yii2-admin菜单
。
假定你已经安装好了yii2,且数据库中创建了user表。具体安装步骤可见此文档。
使用composer安装yii2-admin
非windows环境下:
php composer.phar require mdmsoft/yii2-admin "~2.0"
php composer.phar update
Windows下:
composer require mdmsoft/yii2-admin "~2.0"
composer update
国内网络环境复杂,有可能安装时间较长。如果长时间无响应,可终止命令重试。
配置yii2-admin运行环境
注意:如果将yii2-admin配置在common目录下是全局生效,会导致控制台(console)下命令报错。
因为仅将权限控制应用于frontend模块,所以将配置写到frontend目录下。
配置文件:frontend\config\main.php
return [
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
'layout' => 'left-menu',//yii2-admin的导航菜单
]
...
],
...
'components' => [
...
'authManager' => [
'class' => 'yii\rbac\DbManager', // 使用数据库管理配置文件
]
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
'site/*',//允许访问的节点,可自行添加
'admin/*',//允许所有人访问admin节点及其子节点
]
],
];
创建相应的数据库表
在控制台中输入以下命令:
yii migrate --migrationPath=@mdm/admin/migrations
yii migrate --migrationPath=@yii/rbac/migrations
安装到此完成。
访问http#//localhost/path/to/index.php?r=admin可以看到yii2-admin的管理界面。效果如下图。
注:网址需要修改成你网站首页的实际地址。
配置访问权限示例
以节点terms(一个自定义的节点)为例,节点terms下共有index,view,create,update,delete五个子节点。
配置目标:
未登录用户仅能访问index节点
一般登录用户能访问index,view,create三个节点
管理员能访问所有节点
步骤一:添加可分配列表
打开yii2-admin路由列表
页,点击可用输入框后面的刷新图标将列出当前网站所有可用的路由列表,选中terms各节点路由表添加至右侧可分配路由列表中。
步骤二:添加权限权限列表
=>新增权限
,填好名称提交后,添加对应的路由规则即可。
可用列表中除了路由列表还有已经添加了的权限列表,一个权限可以包含另一个权限。
步骤三:添加角色角色列表
=》新增角色
,分别添加管理员、一般用户、未登录用户,将对应的权限分配给角色。
步骤四:分配角色
分配
界面列出来的用户名是当前系统中已注册的用户。现注册了admin和user账号用于演示。
点击账号后边的眼睛图案,进行权限分配。
按需要,给予相应的权限。
步骤五:配置网站默认访问权限
上面四步配置完成后,我们访问terms各节点测试结果:
以一般用户身份登录时,可以浏览、添加信息,要更新、删除信息时会提示无权操作。符合预期。
以管理员身份登录时,可进行所有操作。符合预期。
但是如果不登录,在访问terms首页时会跳转到登录页面。预期结果是未登录时能访问terms首页。
就是说当前系统默认不认可我们配置给未登录用户的权限。
只需要在配置文件中加一行指定默认规则的代码即可:
'authManager'=> [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['未登录用户'],//添加此行代码,指定默认规则为 '未登录用户'
],
未登录时再访问terms/index节点就能正常显示了,点别的操作时会跳到登录页面,因为未登录时仅有访问首页的权限。
除了在authManager
中配置默认权限,在as access
中也可以配置允许所有人访问的节点。
'as access' => [
'allowActions' => [//下面列出的节点,所有人都可以访问,针对未登录用户的配置也可以移至这里
'admin/*',
'site/*',
]
]
如果大家需要,空了再介绍下自定义规则
和yii2-admin的菜单
的应用。
原文链接:http://www.yiichina.com/tutorial/571
本文旨在介绍yii2-admin的基本用法,并非是最简洁的用法。如有不足之处,还请指正。
koko
最后登录:2023-05-12
在线时长:4334小时42分
- 粉丝421
- 金钱33962
- 威望1105
- 积分88352
共 49 条评论
我的安装好了,不过是英文的,怎么设置成中文呢:
应该整站是通用语言配置。默认是和站点语言一致。自定义语言可以查看配置项目。
@wangwenfan 在main.php文件下的return里加一条语句
'language' => 'zh-CN',//配置成中文
我使用Yii2的基本应用程序模板安装完成yii2-admin后,查看路由只能看到admin下的路由列表
但是,路由列表中看不到app\controller下的控制器?请问为什么
module配置如下:
<?php return [ 'admin' => [ 'class' => 'mdm\admin\Module', 'layout'=>'left-menu', 'mainLayout' => '@app/views/layouts/main.php', ], 'controllerMap' => [ 'assignment' => [ 'class' => 'mdm\admin\controllers\AssignmentController', /* 'userClassName' => 'app\models\User', */ 'idField' => 'user_id', 'usernameField' => 'username', 'fullnameField' => 'profile.full_name', 'extraColumns' => [ [ 'attribute' => 'full_name', 'label' => 'Full Name', 'value' => function($model, $key, $index, $column) { return $model->profile->full_name; }, ], [ 'attribute' => 'dept_name', 'label' => 'Department', 'value' => function($model, $key, $index, $column) { return $model->profile->dept->name; }, ], [ 'attribute' => 'post_name', 'label' => 'Post', 'value' => function($model, $key, $index, $column) { return $model->profile->post->name; }, ], ], 'searchClass' => 'app\models\UserSearch' ], ], ];
components配置如下
<?php return [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'Owod8SuyH0Syh2pjYY6LYGIGvKtQLHAt', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'urlManager'=>[ 'enablePrettyUrl' => true, 'showScriptName' => false,//index.php ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), //权限管理 'authManager' => [ 'class' => 'yii\rbac\DbManager', 'itemTable' => '{{%auth_item}}', 'assignmentTable' => '{{%auth_assignment}}', 'itemChildTable' => '{{%auth_item_child}}', "defaultRoles" => ["guest"], ], //样式管理 'assetManager' => [ 'bundles' => [ 'dmstr\web\AdminLteAsset' => [ 'skin' => 'skin-blue', ], ], ],
为什么我的是英文的呢
检查你的yii语言环境配置
D:\study\yii2>composer require mdmsoft/yii2-admin Using version ^3.2 for mdmsoft/yii2-admin ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - mdmsoft/yii2-admin 3.2 requires deesoft/yii2-angular ~1.3 -> satisfiable by deesoft/yii2-angular[1.3, 1.x-dev]. - mdmsoft/yii2-admin 3.x-dev requires deesoft/yii2-angular ~1.3 -> satisfiable by deesoft/yii2-angular[1.3, 1.x-dev]. - deesoft/yii2-angular 1.x-dev requires bower-asset/angular ~1.3 -> no matching package found. - deesoft/yii2-angular 1.3 requires bower-asset/angular ~1.3 -> no matching package found. - Installation request for mdmsoft/yii2-admin ^3.2 -> satisfiable by mdmsoft/yii2-admin[3.2, 3.x-dev]. Potential causes: - A typo in the package name - The package is not available in a stable-enough version according to your minimum-stability setting see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details. Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems. Installation failed, reverting ./composer.json to its original content.
我安装的时候出现这样的情况是为啥 求指点下
应该是包依赖的问题,具体百度吧,composer我用的也头大
规则里面获取类,为什么一直找不到?格式要写成什么样的
没理解你问题,再详细些
就是你的那个 terms控制器中需要做什么改动
@jian 不需要,你配置好了对应节点的权限它就生效了。
新增规则的时候控制器出现了
'backend\controllers\MapController' must extend from 'yii bac\Rule' or its child class
这个错误。好吧,貌似懂了,as access 这项配置必须开启
为什么我的不登录都能访问admin,布局文件也不是同一个
在配置一节中讲了呀,我修改了布局方案。本来默认的就是不用登录可访问admin。
2333 找权限界面管理 居然就找到你写的这篇了
然后,就愉快的用上了?
@koko 没有...我想找的是Yii 自带的 rabc 模块的管理界面...找了半天没找到...你知道哪里有这种东西吗?
@yaodan 本来yii就没自带图形界面,这个插件就是实现图形化管理rbac
@koko 2333 阿里嘎多~ (:з」∠)
你好 使用yii2-admin安装成功后 点击菜单提示这个错误信息 Call to undefined method yii\helpers\Json::htmlEncode()' 这个是要怎样解决呢
根据你的描述看不出问题由谁引起,出在哪里.你自己再排查下,最好能确定问题具体在哪里
@koko 好的 谢谢
按上面说的操作,结果点击角色页面报错:Call to a member function getRoles() on null,其他几个页面也是报错。
怎么获取当前用户没有某个权限?谢谢!
Yii::$app->user->can('/site/index')
权限界面是出来了,就是在路由里找不到我用gii生成的方法,请问是为啥?
这个最小单位只到路由吧,新添加的,旁边有个刷新按钮,点了以后会更新列表
@koko 点过刷新按钮,还是没有。后来删了2.0的版本,重新安装3.0的版本,在路由里依然没有自己添加的方法,只有默认的40个方法,那都是/admin/ 、 /class/ 这些下面的方法
@wgx214 符合PSR-0规范的路由会自动识别出来,自定义的路由就需要手动添加到配置中去
@wgx214 刷新按钮上面不就是添加按钮么?没有就自己添加呗
我样式还有目录结构应该如何去修改呢。我想要和自己的后台样式统一
yii-admin有模板文件,你可以自己定义一个模板.详细去它官网看看吧
运行这个 报错了 是什么原因
composer require mdmsoft/yii2-admin "~2.0" You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist [ErrorException] Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRepository ::whatProvides() should be compatible with Composer\Repository\ComposerRepo sitory::whatProvides(Composer\DependencyResolver\Pool $pool, $name, $bypass Filters = false) require [--dev] [--prefer-source] [--prefer-dist] [--no-plugins] [--no-progress] [--no-update] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...
composer的问题确实烦人,我自己有时也是一头雾水. 建议直接去搜索composer的报错信息,能找到更详细的解答. 看你的报错信息应该和composer-plugin-api有关,再安装一次试试.
yii migrate --migrationPath=@mdm/admin/migrations yii migrate --migrationPath=@yii/rbac/migrations
这两行代码是在什么地方执行的,怎么执行的?
命令行窗口,yii目录
为什么运行之后数据库表没有创建,也没有报错啊
请确认你在正确的路径下执行了命令
这个内置的用户表的密码规则怎么来的,自己创建的用户和验证机制不一致, 好麻烦, 怎么用内置的创建新用户.
你本地网站首页就有登录链接,里边可以新建用户.
@koko 首页的用户和admin后台的不是一个体系, 创建密码机制都不一样,,这个后来的版本才有地址是 最新版 admin/user/signup
我用
composer require mdmsoft/yii2-admin "~2.0"
composer update
这两行命令下载报错啊The "yiisoft/yii2-composer" plugin requires composer-plugin-api 1.0.0, this *WIL L* break in the future and it should be fixed ASAP (require ^1.0 for example). Deprecation Notice: The Composer\Package\LinkConstraint\MultiConstraint class is deprecated, use Composer\Semver\Constraint\MultiConstraint instead. in phar://C :/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Package/LinkConstrain t/MultiConstraint.php:17 Deprecation Notice: The Composer\Package\LinkConstraint\LinkConstraintInterface interface is deprecated, use Composer\Semver\Constraint\ConstraintInterface inst ead. in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Packa ge/LinkConstraint/LinkConstraintInterface.php:17 ./composer.json has been updated The "yiisoft/yii2-composer" plugin requires composer-plugin-api 1.0.0, this *WIL L* break in the future and it should be fixed ASAP (require ^1.0 for example). Loading composer repositories with package information Updating dependencies (including require-dev) Installation failed, reverting ./composer.json to its original content. [ErrorException] Illegal offset type in isset or empty require [--dev] [--prefer-source] [--prefer-dist] [--no-plugins] [--no-progress] [--no-update] [--update-no-dev] [--update-with-dependencies] [--ignore-platform
没装这个 composer-plugin-api 1.0.0
哦,谢谢啊!不过我已经学会了用yii2自带的rbac。还是谢谢你。
@gew1992 这个用的也是rbac,只是做了个图形界面而已
嗯,明白,不过我后台模板用的bootstrap,所以也就不下这个插件了
分配权限哪里没用,不知道哪里错了
你当前环境里有注册账号不?具体是什么个没用法,得说清楚才能帮到你
@koko 就是分配了权限,没用。普通用户还是和管理员一样的权限
@koko 步骤五没成功,前四步成功
@扑倒ricky 检查你的默认权限,可能你默认就是管理员权限
先应用了dektrium/yii2-user ,然后能不能用这个?
应该是不冲突,两个插件工作在不同的地方
@koko dektrium/yii2-user 也有一个rabc ,不过没有自带界面,要不然,用一家的感觉可能会好点
@asialong 如果它也有rbac,那在配置文件中指定哪个插件接管就行
@asialong 估计几个插件的rbac用的配置文件都是同一个。yii2-admin就是自己做了个图形界面,扩展了一个数据库版。
@koko 好的,我先研究一下,谢谢
补充一个我碰到的问题,给可能需要人参考:
使用
basic
模板创建app时,必须要在config/console.php
中设置authManager
使用rbac:'components' => [ 'db' => $db, 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], ],
否则,执行
yii migrate
的时候会报InvalidConfigException
异常:[jason@kali:/var/www/learn/basic]$ ./yii migrate --migrationPath=@yii/rbac/migrations Yii Migration Tool (based on Yii v2.0.6) Total 1 new migration to be applied: m140506_102106_rbac_init Apply the above migration? (yes|no) [no]:yes *** applying m140506_102106_rbac_init NULL Exception 'yii\base\InvalidConfigException' with message 'You should configure "authManager" component to use database before executing this migration.' in /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php:29 Stack trace: #0 /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php(36): m140506_102106_rbac_init->getAuthManager() #1 /var/www/learn/basic/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(492): m140506_102106_rbac_init->up() #2 /var/www/learn/basic/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(129): yii\console\controllers\BaseMigrateController->migrateUp('m140506_102106_...') #3 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0) #4 /var/www/learn/basic/vendor/yiisoft/yii2/base/InlineAction.php(55): call_user_func_array(Array, Array) #5 /var/www/learn/basic/vendor/yiisoft/yii2/base/Controller.php(151): yii\base\InlineAction->runWithParams(Array) #6 /var/www/learn/basic/vendor/yiisoft/yii2/console/Controller.php(91): yii\base\Controller->runAction('', Array) #7 /var/www/learn/basic/vendor/yiisoft/yii2/base/Module.php(455): yii\console\Controller->runAction('', Array) #8 /var/www/learn/basic/vendor/yiisoft/yii2/console/Application.php(167): yii\base\Module->runAction('migrate', Array) #9 /var/www/learn/basic/vendor/yiisoft/yii2/console/Application.php(143): yii\console\Application->runAction('migrate', Array) #10 /var/www/learn/basic/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request)) #11 /var/www/learn/basic/yii(19): yii\base\Application->run() #12 {main}
注意:上面
*** applying m140506_102106_rbac_init
下面这行打印出来的NULL,是因为我调试过程中修改了代码,在第28行添加了输出:[jason@kali:/var/www/learn/basic]$ grep -n var_dump -C3 /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php 25- { 26- $authManager = Yii::$app->getAuthManager(); 27- if (!$authManager instanceof DbManager) { 28: var_dump($authManager); 29- throw new InvalidConfigException('You should configure "authManager" component to use database before executing this migration.'); 30- } 31- return $authManager;
这步本来就是必须的。。。 我教程中应该有提到吧
@koko 对于
basic
模板的,配置文件要修改config/web.php
,同时也要修改config/console.php
。不过,你写的是针对
advanced
模板的,原文:谢谢补充,只用过一次basic模板。没动手去配置过。
Problem was quite simple: The configuration was not used. yii migrate is a console command and usually the configuration for such commands is placed in a seperated file. In case of yii2-app-base template, from which I have created my application, there is a config/console.php configuration file where the authManager needs to be declared. It is not sufficient to have it in the config/web.php declared only. In case of yii2-app-advanced the authManager should be declared in console/config/main.php and not in the backend or frontend configuration files.
refer:http://stackoverflow.com/questions/30478903/yii2-cannot-perform-rbac-migration-you-should-configure-authmanager
@koko 大神,麻烦提供下user表创建的SQL语句脚本呗
我看了你给的链接,里面有yii2安装过程的,这一步我做好了,yii2-admin也安装了,但是没有创建User表。
yii2-admin
对user表的字段是否有要求?yii2-admin
是否需要这样的前提:登录验证部分已经修改为使用数据库验证?谢谢!
这个网站上有,搜索下就出来了。如果你安装的是高级模板,系统默认是带了user表的创建语句,在console\migrations下