广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Yii中如何使用RBAC
  • 728
分享到

Yii中如何使用RBAC

2024-04-02 19:04:59 728人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Yii中如何使用RBAC,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开始准备Yii提供了强大的配置机制和很多现成的类库。在Yii中使用RBA

这篇文章将为大家详细讲解有关Yii中如何使用RBAC,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

开始准备
Yii提供了强大的配置机制和很多现成的类库。在Yii中使用RBAC是很简单的,完全不需要再写RBAC代码。所以准备工作就是,打开编辑器,跟我来。
设置参数、建立数据库
在配置数组中,增加以下内容:

复制代码代码如下:


‘components‘ => array(
    //……
    ‘authManager‘=>array(
            ‘class‘=>‘CDbAuthManager‘,//认证类名称
            ‘defaultRoles‘=>array(‘guest‘),//默认角色
            ‘itemTable‘ => ‘pre_auth_item‘,//认证项表名称
            ‘itemChildTable‘ => ‘pre_auth_item_child‘,//认证项父子关系
            ‘assignmentTable‘ => ‘pre_auth_assignment‘,//认证项赋权关系
        ),
   //……


那这三个数据表怎么建立呢?很简单,去看framework/WEB/auth/schema.sql。注意要和你的自定义的表名称对应起来。比如SQL文件中的AuthItem你要修改为pre_auth_item。然后在数据库中运行这个SQL文件中的语句。

了解概念
你可能要问,剩下的代码呢?我告诉你,没有啦。RBAC系统就这样建立起来了。但是为了使用它,你需要了解它的运行机制。我会尽量讲的啰嗦一点……(官方的RBAC文档在这里,但是我曾经看了4-5遍才明白。)

三个概念
你需要了解的是,授权项目可分为operations(行动),tasks(任务)和 roles(角色)。
一个用户拥有一个或者多个角色,比如,我们这里有三个角色:银行行长、银行职员、顾客。我们假设:
    * 张行长 有角色:银行行长、银行职员、顾客(人家自己可以存钱嘛)。
    * 王职员 有角色:银行职员、顾客。
    * 小李 有角色:顾客。

那么,相应的,只要顾客可以做的事情,小李就可以做,王职员和张行长也可以。银行职员可以做的事情,王职员和张行长都可以做,小李就不可以了。

比如,一个“顾客”可以存钱,那么拥有“顾客”角色的张行长、王职员、小李都可以存钱。“银行职员”可以打印顾客的交易记录,那么有“银行职员”角色的张行长和王职员都可以,而小李不行,必须找一个有“银行职员”角色的人才可以打印详细的交易记录。一个“银行行长”才可以进入银行钱库提钱,那么只有张行长可以,因为它才有“银行行长”的角色。
这就是基于角色的认证体系,简称RBAC。

角色的继承
角色是可以继承的,比如我们规定如下:
    * 凡是“银行行长”都是“银行职员”,也就是说,只要银行职员可以做的事情,银行行长都可以做。
    * 凡是“银行职员”都是顾客,同上,顾客可以做的事情银行职员也可以做。
那么角色关系就变成了:
    * 张行长 有角色:银行行长。
    * 王职员 有角色:银行职员。
    * 小李 有角色:顾客。
这样更简单了,这就是角色的继承。

任务的继承
一个任务(task)是可以包含另外一个任务的,我们举个例子,比如“进入银行”。
我们设定“顾客”这个角色有“进入银行”的权限。也就是说,“顾客”可以执行“进入银行”的任务。接下来,我们假设“进入柜台”是进入银行的父权限,也就是说,“进入柜台”包含“进入银行”。只要能“进入柜台”的人都可以“进入银行”。我们把“进入柜台”这个任务权限给“银行职员”。

那么从角色上来说,王职员可以进入银行,因为王职员的角色是“银行职员”,而“银行职员”包含了“顾客”的角色。那么“顾客”可以进行的“任务”对于“银行职员”来说也是可以进行的。而“顾客”可以“进入银行”,那么王职员也可以“进入银行”。这是角色的继承带来的。

我们再假设有个赵领导,是上级领导,可以进入柜台进行视察。那么,我们的任务关系是:
    * 赵领导 有任务:进入柜台。
那么,赵领导就可以“进入银行”。因为“进入银行”是被“进入柜台”包含的任务。只要可以执行“进入柜台”的人都可以执行“进入银行”。这就是任务的继承。

关于行动
行动是不可划分的一级。也就是说。而一个行动是不能包含其他行动的。假设我们有个行动叫“从银行仓库中提钱”。我们把这个行动作包含“进入柜台”。那么只要可以执行“从银行仓库中提钱”的角色都可以执行“进入柜台”这个任务。

三者关系
    * 一个角色可以包含另外一个或者几个角色。
    * 一个角色可以包含另外一个或者几个任务。
    * 一个角色可以包含另外一个或者几个行动。
    *
    * 一个任务可以包含另外一个或者几个任务。
    * 一个任务可以包含另外一个或者几个行动。
    *
    * 一个行动只能被角色或者任务包含,行动是不可以包含其他,也不可再分。
这样,就形成了一个权限管理体系。关于“任务”和“行动”,你不必思考其字面上的意义。这两者就是形成两层权限。

进行赋权
我们建立了RBAC权限管理,就需要进行对权限的WEB管理。这些就需要你自己写代码了。
根据不同种类的项目调用下列方法之一定义授权项目:
    * CAuthManager::createRole
    * CAuthManager::createTask
    * CAuthManager::createOperation
一旦我们拥有一套授权项目,我们可以调用以下方法建立授权项目关系:
    * CAuthManager::addItemChild
    * CAuthManager::removeItemChild
    * CAuthItem::addChild
    * CAuthItem::removeChild
最后,我们调用下列方法来分配角色项目给各个用户:
    * CAuthManager::assign
    * CAuthManager::revoke
下面我们将展示一个例子是关于用所提供的api建立一个授权等级:

复制代码代码如下:


$auth=Yii::app()->authManager;
    $auth->createOperation('createPost','create a post');
    $auth->createOperation('readPost','read a post');
    $auth->createOperation('updatePost','update a post');
    $auth->createOperation('deletePost','delete a post');
    $bizRule='return Yii::app()->user->id==$params["post"]->authID;';
    $task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule);
    $task->addChild('updatePost');
    $role=$auth->createRole('reader');
    $role->addChild('readPost');
    $role=$auth->createRole('author');
    $role->addChild('reader');
    $role->addChild('createPost');
    $role->addChild('updateOwnPost');
    $role=$auth->createRole('editor');
    $role->addChild('reader');
    $role->addChild('updatePost');
    $role=$auth->createRole('admin');
    $role->addChild('editor');
    $role->addChild('author');
    $role->addChild('deletePost');
    $auth->assign('reader','readerA');
    $auth->assign('author','authorB');
    $auth->assign('editor','editorC');
    $auth->assign('admin','adminD');


也就是说,你需要自己写一个管理界面,来列出你的角色、任务、行动,然后可以在这个界面上进行管理。比如增加、删除、修改。

权限检查
假设你在你的管理界面进行了赋权,那么可以在程序里面进行权限检查:

复制代码代码如下:


if(  Yii::app()->user->checkAccess('createPost')  )
{
    // 这里可以显示表单等操作
} else {
    // 检查没有通过的可以跳转或者显示警告
}

上面的代码就检查了用户是否可以执行“createPost”,这createPost可能是一个任务,也可以是一个行动。

关于“Yii中如何使用RBAC”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Yii中如何使用RBAC

本文链接: https://www.lsjlt.com/news/83787.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Yii中如何使用RBAC
    这篇文章将为大家详细讲解有关Yii中如何使用RBAC,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开始准备Yii提供了强大的配置机制和很多现成的类库。在Yii中使用RBA...
    99+
    2022-10-19
  • 如何在PHP中使用Yii函数
    Yii是一款流行的PHP框架,其为我们提供了许多便捷的函数和方法来加速开发。在本文中,我们将介绍如何在PHP中使用Yii函数。一、加载Yii框架首先,我们需要加载Yii框架。可以使用以下代码://引入Yii的自动加载器 require_on...
    99+
    2023-05-18
    函数 PHP yii
  • Exchange2010中如何使用RBAC来控制用户权限
    这篇文章主要介绍Exchange2010中如何使用RBAC来控制用户权限,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、RBAC对于不同类型的用户有不同的作用。在2010的Exchange系统中,将会全部使用基于角...
    99+
    2023-06-17
  • yii视图中怎么使用widget
    这篇文章给大家分享的是有关yii视图中怎么使用widget的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。三种yii视图中使用widget的方式一、显示详细信息:二、显示列表,可以进行条件限制和分页:控制器:视图:...
    99+
    2023-06-06
  • php中Yii框架如何添加redis
    这篇文章主要介绍php中Yii框架如何添加redis,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampS...
    99+
    2023-06-14
  • kubernetes中如何实现RBAC 角色访问控制
    小编给大家分享一下kubernetes中如何实现RBAC 角色访问控制,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一:RBAC体系结构二:RBAC角色绑定流程三:说明1.RBAC的优势a.对集群中的资源和非资源权限均有完...
    99+
    2023-06-04
  • 如何利用yii 2框架发送电子邮件
    小编给大家分享一下如何利用yii 2框架发送电子邮件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!利用yii 2框架发送电子邮件,具体步骤如下所示:config/...
    99+
    2023-06-06
  • 如何调优PHP-FPM提高Yii框架应用的性能
    一、介绍Yii框架是一种高性能的PHP框架,它广泛应用于开发高流量的Web应用程序。然而,在高并发环境下,Yii框架的性能可能会受到限制。为了最大限度地提高Yii框架应用的性能,我们可以通过调优PHP-FPM来实现。二、PHP-FPM简介P...
    99+
    2023-10-21
    性能 应用 调优 yii php-fpm
  • PHP如何在Yii框架中进行错误和异常处理
    这篇文章主要讲解了“PHP如何在Yii框架中进行错误和异常处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP如何在Yii框架中进行错误和异常处理”吧!Yii已经默认已经在CApplic...
    99+
    2023-06-20
  • Angular中基于RBAC如何在前后端分离模式下实现权限控制
    Angular中基于RBAC如何在前后端分离模式下实现权限控制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。权限的设计中比较常见的就是RBAC...
    99+
    2022-10-19
  • yii中form表单提交之前JS如何在提交按钮上进行验证
    这篇文章主要介绍yii中form表单提交之前JS如何在提交按钮上进行验证,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 很多时候,需要对Yii表单model中的对象设置的r...
    99+
    2022-10-19
  • javascript中$如何使用
    这篇文章主要介绍了javascript中$如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript $用法:1、【$()】可以是【$(expresion)】...
    99+
    2023-06-14
  • python中如何使用中文
    小编给大家分享一下python中如何使用中文,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用中文(以及其它非ASCII编码)在...
    99+
    2022-10-19
  • javascript中lastindexof()如何使用用
    小编给大家分享一下javascript中lastindexof()如何使用用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 在javascript中,lasti...
    99+
    2022-10-19
  • C#中如何使用GDI
    在C#中使用GDI(Graphics Device Interface)可以通过System.Drawing命名空间中的类来实现。下...
    99+
    2023-09-15
    C# GDI
  • eclipse中如何使用tomcat
    在Eclipse中使用Tomcat,可以按照以下步骤进行操作: 首先,确保已经将Tomcat服务器正确地安装在本地机器上。 ...
    99+
    2023-10-25
    eclipse tomcat
  • Vue中如何使用slot
    这期内容当中小编将会给大家带来有关Vue中如何使用slot,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关于slot是这样说的,除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容...
    99+
    2023-06-04
  • docker中如何使用helm
    这篇文章将为大家详细讲解有关docker中如何使用helm,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。    在k8s中,我们对无状态应用如nginx、myapp...
    99+
    2023-06-04
  • Android 中ContentProvider如何使用
    本篇文章为大家展示了Android 中ContentProvider如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Content Provider 的简单介绍: * Android中的Con...
    99+
    2023-05-30
    android contentprovider
  • Python中如何使用threading
    Python中如何使用threading,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Python 版本是3.7.4  前面的文章记录了网络请求(urllib,requ...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作