YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例_php实例

来源:脚本之家  责任编辑:小易  

宝宝用品类  下面这些有些可以去孕婴店一次性购买,很多孕婴店对于新妈妈会打折和网上价格差不多。  2、婴儿碗、勺(1套),买那种耐高温的,如果宝宝拒绝使用奶瓶喝水,可以用小碗小勺来喂。将来4个月时吃米奶也用的着。  4、洗发沐浴露,润肤露;润肤油;婴儿指甲剪刀;宝宝洗衣皂;肚脐贴;  6、爽身粉:爽身粉要买不含滑石粉的,擦宝宝的脖子和腋下。  7、护臀膏:用尿不湿的必备品,宝宝稍微一点红pp,涂点上去,第二天就好。  8、布尿片若干:生态透气纯棉尿布片:出了月子,白天就可以给宝宝用布尿片,用尿布要勤换,可以重复使用N次,跟尿不湿比真的太合算啦。尿不湿很方便,但是可能换的次数会减少。  10、尿

本文实例讲述了YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用。分享给大家供大家参考,具体如下:

我们知道手机卫星定位是利用的GPS定位模块,通过卫星信号确定的位置,在开阔的地方定位精度一般可以达到几十米左右的误差水平。在使用手机GPS定位时,可以明显感觉到定位速度较慢,定位精度不高,而且还不支持室内定位,定位过程比较耗电等缺点。小编是一个经常使用手机定位的人,寻找位置、获取所在位置坐标、导航等经常用到,手机GPS卫星定位的缺点根本无法容忍,在长期使用手机定位的过程中,发现了一些提升手机定位精度的办法,这些方法非常简单,但却很有效果,今天就分享一下这些方法。1、常规方法如果我们想让手机定位又快又准,那当然要使用GPS、WLAN和移动网络混合定位模式,就是同时打开并连接手机的GPS、移动网络

在使用YII2中自带的RBAC时,需要先配置config/web.php:

赵本山和郭德纲无疑是造星高手,在他们手中捧红的明星不在少数,那么这两位艺术家到底谁更强一些呢?曹云金可谓是郭德纲这一生中最后悔收的徒弟,不管谁对谁错。当年,郭德纲在自己落魄的时候,有一帮徒弟却离开了,这让谁心里也不好受。赵本山有没有离开自己的徒弟呢?也有,但是却不是主动离开的,他是关小平。关于关小平为什么离开,网上给出的解释是因为关小平在公司得罪了人,因此被除名了。尽管,关小平现在已经不再本山传媒公司了,但是依旧跟赵本山保持着联系。郭德纲捧红的徒弟有谁呢?岳云鹏肯定是首选,其次是自己儿子郭麒麟,烧饼也算一个,自己能想到的也就这些了。而赵本山捧红的徒弟真是太多太多了,宋小宝,小沈阳等。光一部电视

return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], // ... ], ];

不知道你玩的是什么游戏保险起见给你加了一个机械硬盘。I37100单核很强适合玩游戏再搭配GTX1050Ti4G基本上可以畅玩所有游戏了。显示器700说贵也不贵说便宜也不便宜,购买的时候记得问下客服包括接口之类的东西,看介绍有HDMI接口,参考以下配置即可。CPU:INTELi37100散605主板:微星B250MPROVD500显卡:微星GTX1050Ti飙风4G1080内存:威刚DDR424008G420固态:宇瞻黑豹120G340硬盘:WD1T64M蓝盘278散热:九州风神玄冰30059电源:全汉额定450W铜牌250机箱:航嘉暗夜猎手290显示器:AOC22IPS无边框I2279VW70

如果你需要运行yii migrate来创建表,那么config/console.php也需要同上面一样配置一下。

cmd进入项目目录,运行如下命令:

yii migrate --migrationPath=@yii/rbac/migrations

你会发现在数据库中创建了四张表

auth_assignment 角色与用户的关联表 auth_item 存放角色与权限,通过type字段区分 auth_item_child 存放角色与权限的上下级关系 auth_rule 规则表,用于扩展权限功能

为了演示,我们在控制器下分别写四个方法,分别用来创建权限,创建角色,指派角色,使用规则。

IndexController.php代码如下:

<?php namespace app\controllers; use YII; use app\models\MyUserLogin; use app\rbac\UserUpdSelfRule; use app\controllers\BaseController; class IndexController extends BaseController { //首页 public function actionIndex() { $this->renderPartial('index'); } //登陆 public function actionLogin() { if (YII::$app->request->isPost) { $user = new MyUserLogin(); $user->load(YII::$app->request->post(), ''); if ($user->login()) { echo '登陆成功'; } else { echo '登陆失败'; } } else { return $this->renderPartial('login'); } } //为了演示,这里我们添加几条权限 public function actionPer() { $auth = YII::$app->authManager; //创建用户删除权限 $per = $auth->createPermission('user/del'); $per->description = '删除用户'; $auth->add($per); //创建用户更新权限 $per = $auth->createPermission('user/upd'); $per->description = '更新用户'; $auth->add($per); //创建用户添加权限 $per = $auth->createPermission('user/add'); $per->description = '添加用户'; $auth->add($per); //创建用户查看权限 $per = $auth->createPermission('user/list'); $per->description = '查看用户列表'; $auth->add($per); } //添加角色 public function actionRole() { $auth = YII::$app->authManager; //添加管理员角色 $admin = $auth->createRole('admin'); $admin->description = '管理员'; $auth->add($admin); //给管理员赋予权限 $auth->addChild($admin, $auth->getPermission('user/del')); $auth->addChild($admin, $auth->getPermission('user/upd')); $auth->addChild($admin, $auth->getPermission('user/add')); $auth->addChild($admin, $auth->getPermission('user/list')); //添加普通员工角色 $employee = $auth->createRole('employee'); $employee->description = '普通员工'; $auth->add($employee); $auth->addChild($employee, $auth->getPermission('user/list')); $auth->addChild($employee, $auth->getPermission('user/add')); } //给用户指派角色 public function actionAssign() { $auth = YII::$app->authManager; //注意这里的2是用户的ID,即你用户表user里的ID //也可通过YII::$app->user->id获取 $auth->assign($auth->getRole('admin'), 1); $auth->assign($auth->getRole('employee'), 2); } //添加规则 public function actionRule() { $auth = YII::$app->authManager; $rule = new UserUpdSelfRule(); $auth->add($rule); //创建权限,与规则关联 $per = $auth->createPermission('user/upd/updSelf'); $per->description = '用户只能修改自已'; $per->ruleName = $rule->name; $auth->add($per); //这里,要注意,要把user/upd/updSelf权限设为user/upd的父级 //要不然,普通员工访问user/upd这个方法会被拦住 $auth->addChild($per, $auth->getPermission('user/upd')); //给普通员工赋予user/upd/updSelf权限,注意我们这里并没有给员工赋予user/upd权限 $auth->addChild($auth->getRole('employee'), $per); } }

我们在项目目录下创建rbac目录,并创建UserUpdSelfRule.php,来实现用户只能修改自已信息的规则。

<?php //注意命名空间要跟你的目录对应 namespace app\rbac; use yii\rbac\Rule; //必须继承自yii\rbac\Rule class UserUpdSelfRule extends Rule { public $name = 'userUpdSelf'; //必须要实现execute方法 //$user表示用户ID //$item规则相关的角色或者权限 //$params传递过来的参数 public function execute($user, $item, $params) { //如果没有设置参数ID,直接返回true if (!isset($params['id'])) { return true; } //判断id是否是当前用户ID return ($params['id'] == $user) ? true : false; } }

我们访问index/per查看数据表中的变化。

访问index/role结果如下:

访问index/assign结果如下:

访问index/rule结果如下:

为了能够对我们的模块,控制器,方法进行权限控制,我们需要创建一个基类来统一处理,上面的控制器就是继承自基类。

BaseController.php代码如下:

<?php namespace app\controllers; use YII; use yii\web\Controller; class BaseController extends Controller { //不需要验证的 protected $noCheckAccess = [ 'index/index', 'index/per', 'index/role', 'index/assign', 'index/rule', 'index/login', ]; //不需要登陆的 protected $noLogin = [ 'index/login', ]; //验证权限 //注意,不要把获取模块名,控制器名,方法名写到init()函数里,那样是获取不到的 //这个坑我已经踩了,大家就不用再去踩了 public function beforeAction($action) { $mid = !empty($this->module->id) ? $this->module->id : ''; $cid = !empty($this->id) ? $this->id : ''; $aid = !empty($action->id) ? $action->id : ''; //如果模块为basic,我们只验证控制器/方法 if ($mid == 'basic') { $per = "{$cid}/{$aid}"; } else { $per = "{$mid}/{$cid}/{$aid}"; } if (!in_array($per, $this->noLogin)) { if (!$this->checkOnline()) { $this->redirect('index/login'); } } if (!in_array($per, $this->noCheckAccess)) { if (!YII::$app->user->can($per)) { die('你没有权限'); } } return parent::beforeAction($action); } //检查是否在线 public function checkOnline() { return !empty(YII::$app->user->id) ? true : false; } }

为了演示,我们创建一个UserController.php,代码如下:

<?php namespace app\controllers; use YII; use app\controllers\BaseController; class UserController extends BaseController { public function actionUpd() { $id = YII::$app->request->get('id', 0); echo 'user id : ', YII::$app->user->id, '<br>'; //先判断用户有没有只能修改自已的权限 if (YII::$app->user->can('user/upd/updSelf')) { //然后再判断修改ID是否与自已的ID一样,在UserUpdSelfRule里进行判断 if (YII::$app->user->can('user/upd/updSelf', ['id' => $id])) { echo '有权修改自已'; } else { echo '不能修改除自已以外的'; } } else { echo '修改所有'; } } public function actionDel() { echo 'user id : ', YII::$app->user->id, '<br>'; echo 'user del'; } public function actionList() { echo 'user id : ', YII::$app->user->id, '<br>'; echo 'user list'; } public function actionAdd() { echo 'user id : ', YII::$app->user->id, '<br>'; echo 'user add'; } }

我的用户表里有两个用户

分别登陆这两个用户,然后让他们访问user/add,user/del,user/list,user/upd,结果如下:

admin用户状态如下:

test用户状态如下:

test之所以能够访问user/upd是因为我们把user/upd/updSelf设为了user/upd的父级,如果没有设置,这里是会被拦住的。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

ThinkPHP中RBAC权限控制求助

权限配置文件:

//超级管理员

'RBAC_SUPERADMIN' => 'admin', //超级管理名称

'ADMIN_AUTH_KEY' => 'superadmin', //超级管理识别

'USER_AUTH_ON' => true, //开启验证

'USER_AUTH_TYPE' => 1, //验证类型(1登录验证,2实时验证)

'USER_AUTH_KEY' => 'uid', //用户认证识别号

'NOT_AUTH_MODULE' => 'User', //不验证的控制器

'NOT_AUTH_ACTION' => '',//不验证的action

'RBAC_ROLE_TABLE' => 'lx_role', //角色表名称

'RBAC_USER_TABLE' => 'lx_role_user', //用户关联表

'RBAC_ACCESS_TABLE' => 'lx_access', //权限表

'RBAC_NODE_TABLE' => 'lx_node', //节点表

复制代码

test用户给的权限:

Index控制器的index方法允许

Baoji控制器的所有方法允许访问

但当我登录该用户点击baoji控制器下的remark时 报无权限 求高手提点提点....

import('ORG.Util.RBAC');

RBAC::saveAccessList();

p($_SESSION);

复制代码

下面是结果

Array

(

[verify] => 20c1945eae4b9868cbbfd09675f7d76e

[uid] => 5

[username] => test

[last_login_time] => 1376992491

[last_login_ip] => 127.0.0.1

[_ACCESS_LIST] => Array

(

[DEFAULT] => Array

(

[INDEX] => Array

(

[INDEX] => 31

)

[BAOJI] => Array

(

[INDEX] => 40

[REMARK] => 41

[VIEW] => 42

[SUBMIT] => 43

)

)

)

)

复制代码

这是权限判断的代码

$notAuth=in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE'))) ||

in_array(ACTION_NAME, explode(',', C('NOT_AUTH_ACTION')));

if(C('USER_AUTH_ON') and !$notAuth){

import('ORG.Util.RBAC');

RBAC::AccessDecision()||$this->error('没有权限');

}

yii2 后台怎么直接用/admin

yii2访问权限默认由自带rbac组件管理需要自编写相应规则实现权限管理图形界面

yii2-adminrbac管理视化需要点几鼠标能设置简单规则

本教程软件版本及链接:yii2(v2.06,使用高级模板),yii2-admin(2.0)

yii2:

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

安装完本回答被提问者采纳

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,module,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是独立的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是独立的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,module,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是独立的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是独立的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

  • 本文相关:
  • yii2 rbac使用dbmanager实现后台权限判断的方法
  • yii2 rbac权限控制之rule教程详解
  • yii2 rbac权限控制操作步骤实例教程
  • yii2 rbac权限控制之菜单menu实例教程
  • yii2搭建后台并实现rbac权限控制完整实例教程
  • yii框架模块化处理操作示例
  • yii分模块加载路由的实现方法
  • yii中srbac权限扩展模块工作原理与用法分析
  • yii模块实现绑定二级域名的方法
  • yii2创建控制器(createcontroller)方法详解
  • yii2控制器controller ajax操作示例
  • yii2设置默认控制器的两种方法
  • yii2框架控制器、路由、url生成操作示例
  • tp5修改(实现即点即改)
  • php解析html类库simple_html_dom的转码bug
  • 实例讲解php页面静态化
  • ci框架实现创建自定义类库的方法
  • 常用的php图片处理类(水印、等比缩放、固定高宽)分享
  • 利用switch语句进行多选一判断的实例代码
  • 随时给自己贴的图片加文字的php代码
  • thinkphp中create()方法自动验证实例
  • yii2自动登录cookie总是失效的解决方法
  • thinkphp5框架接口写法简单示例
  • ThinkPHP中RBAC权限控制求助
  • yii2 后台怎么直接用/admin
  • thinkphp的auth权限和rbac有什么区别
  • thinkphp的auth权限和rbac有什么区别
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php实例yii框架入门及常用技巧总结php优秀开发框架总结smarty模板入门基础教程php面向对象程序设计入门教程php字符串(string)用法总结php+mysql数据库操作入门教程php常见数据库操作技巧汇总yii2 rbac使用dbmanager实现后台权限判断的方法yii2 rbac权限控制之rule教程详解yii2 rbac权限控制操作步骤实例教程yii2 rbac权限控制之菜单menu实例教程yii2搭建后台并实现rbac权限控制完整实例教程yii框架模块化处理操作示例yii分模块加载路由的实现方法yii中srbac权限扩展模块工作原理与用法分析yii模块实现绑定二级域名的方法yii2创建控制器(createcontroller)方法详解yii2控制器controller ajax操作示例yii2设置默认控制器的两种方法yii2框架控制器、路由、url生成操作示例tp5修改(实现即点即改)php解析html类库simple_html_dom的转码bug实例讲解php页面静态化ci框架实现创建自定义类库的方法常用的php图片处理类(水印、等比缩放、固定高宽)分享利用switch语句进行多选一判断的实例代码随时给自己贴的图片加文字的php代码thinkphp中create()方法自动验证实例yii2自动登录cookie总是失效的解决方法thinkphp5框架接口写法简单示例php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php字符串的连接的简单实例微信公众平台开发之配置与请求yii配置文件用法详解php利用curl抓取新浪微博内容示例在laravel中使用with实现动态添加where条laravel5.1框架下的批量赋值实现方法分析基于php 面向对象之成员方法详解ajax在joomla中的原生态应用代码laravel的throttle中间件失效问题解决方法php对微信支付回调处理的方法浅谈php值mysql操作类
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved