• YII框架中的srbac权限管理模块的安全与使用(版本是1.1.20)


    0x01 前言

    • srbac的原理:

      YII框架的srbac模块是一个专门管理权限的一个模块,那它是怎么管理权限的呢。我们知道YII框架的网页显示是由控制器实现的,控制器继承父类CController和Controller,每个控制器中又有许多方法,就是以action开头的执行动作的函数,函数之中可以使用render渲染视图。srbac模块就是控制这个action开头的执行动作的函数来实现权限控制的。而且这个权限控制是基于登陆的用户来完成的(登陆用户的记录用的是Yii::app()->user->login()这个方法实现的)。什么用户能访问什么样的action开头执行动作的模块。这个就是srbac模块的原理

    • srbac的实现:

      YII框架srbac模块是如何实现的呢,实际上是通过3个东西来确定的呢?用户、角色、任务这三个东西决定的,用户就是登陆YII框架的用户,角色可以是在srbac的管理页面中的新建的(srbac模块中有一个超级管理员角色Authority,是默认的,用户要想登陆srbac模块必须要有这个权限),还有一个就是任务,任务当中放的就是控制器中的action方法(就是刚才上面说的)。比如我有个action方法actionIndex(浏览器中的访问方式是:控制器/index),我把这个方法放到一个任务中(假如这个任务的名字是project),之后我新建一个角色叫admin,之后我把project放到admin角色中,最后将admin角色赋予给我要的用户,假如有一个用户叫cxy,我把admin角色赋给他。之后你们觉得我在登陆了cxy用户,能不能访问这个这个actionIndex方法。答案是能,逻辑图就是cxy(用户)->admin(角色)->project(任务)->actionIndex(方法)。

    0x02 srbac配置方法

    1.首先新建一个项目,我定义为srbac
    在这里插入图片描述
    2.安装成功
    在这里插入图片描述
    3.在数据库中新建一个表user,这个表马上配置的时候需要用,这个里面新建了好几个用户
    在这里插入图片描述
    4.使用gii模块(删除注释,这里我创建了一个admin模块方便以后操作),配置数据库(这个根据自己配),如果这个不会的话…
    在这里插入图片描述
    在这里插入图片描述
    5.将下载的srbac模块复制粘贴到modules文件夹中(我下载的版本是srbac_1.3beta,不会下载的可以到我博客资源区里面下载)
    在这里插入图片描述
    6.修改protected/config/main.php文件红线为添加的

    'import'=>array(
    		'application.models.*',
    		'application.components.*',
    		'application.modules.srbac.controllers.SBaseController',
    	),
    

    在这里插入图片描述

       'srbac' => array( 
    	        'userclass'=>'User', //用户表ActiveRecord模型 
    	        'userid'=>'Id', //用户表主键字段
    	        'username'=>'username', //用户名 
    	        'delimeter'=>'@', //模块中添加operation时,插入Srbac之后的定界符。默认是:- 
    	        'debug'=>true, //默认是 false,只有当debug为false时,Srbac模块才能生效 
    	        'pageSize'=>10, //管理授权项页面显示的授权项个数,默认是15 
    	        'superUser' =>'Authority', //建议将此名称改为超级管理员名称,有利于角色的统一
    	        'css'=>'srbac.css',//路径别名,目录为srbac/css/srbac.css 
    	        //'layout'=>'application.views.layouts.main', //布局视图文件别名,默认为application.views.layouts.main
    	        // 'layout'=>'application.modules.srbac.views.layouts.layoutSrbac',
    	        'notAuthorizedView'=>'srbac.views.authitem.unauthorized', //用户访问没有授权页面显示的视图
    	        'alwaysAllowed'=>array(//允许任何人访问的操作(动作方法)
    	                'SiteLogin','SiteLogout','SiteIndex', 
    	                'SiteError', 'SiteContact'
    	        ),
    	        'userActions'=>array('Show','View','List'), //分配给用户的默认操作 
    	        'listBoxNumberOfLines' => 15,//列表框的行数,默认是10
    	        'imagesPath' => 'srbac.images', //Srbac模块中相关图片保存路径 
    	        'imagesPack'=>'noia', //模板名称,noia或tango
    	        'iconText'=>true, //图标旁边是否显示文字,默认是false 
    	        'header'=>'srbac.views.authitem.header', //头部信息  
    	        'footer'=>'srbac.views.authitem.footer', //底部信息  
    	        'showHeader'=>true, //是否显示头部信息,默认是:false 
    	        'showFooter'=>true, //是否显示底部信息,默认是:false
    	        'alwaysAllowedPath'=>'srbac.components', //总是允许访问:组件路径 
    	    ),
    

    PS:注意这里debug一定要设置为true,因为上面我说到只有用户有超级管理员才能访问这个srbac这个模块,所以我们开启debug调试模式,这样任何用户都可以访问srbac这个模块

    在这里插入图片描述

    'authManager'=>array( 
                        // 类SDbAuthManager在srbac模块中的路径(别名),注意大小写
                        'class'=>'application.modules.srbac.components.SDbAuthManager', 
                        // 使用的数据库的组件名
                        'connectionID'=>'db', 
                        // 下面是3个数据表,后面再说每个表的作用
                        // The itemTable name (default:authitem) 
                        'itemTable'=>'items', 
                        // The assignmentTable name (default:authassignment) 
                        'assignmentTable'=>'assignments', 
                        // The itemChildTable name (default:authitemchild) 
                        'itemChildTable'=>'itemchildren', 
                    ),
    

    在这里插入图片描述

    6.创建srbac模块需要使用的表User.php,为什么表的名字为User,请看上面配置的userclass这个选项
    在这里插入图片描述
    7.点击安装之后,登陆srbac模块
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    PS:这里设置中文页面的方法首先更改main.php文件(别问我在哪里,上面有),添加如下一行
    在这里插入图片描述
    并且在srbac这个模块中的message文件夹中将zh文件夹更改为zh_cn,这样就能实现中文显示了在这里插入图片描述
    在这里插入图片描述

    以上就是安装srbac模块的方式

    0x03 srbac模块的使用方法

    1.随便新建一个控制器CxyController.php(这里注意继承的是SBaseController,SBaseController继承Controller),这里控制器有3个方法
    在这里插入图片描述
    2.之后进入srbac页面进行配置,上面讲过action执行的方法需要存放在任务之中,那怎么导入action的方法呢
    在这里插入图片描述
    在这里插入图片描述
    3.上面的红线中的方法就是我们刚刚创建的方法,这里会自动识别(因为继承了SBaseController这个类,类中会自动记录)
    在这里插入图片描述
    在这里插入图片描述

    4.上面那张图可以看到这个就是我们刚才添加的方法,之后添加两个任务,一个project1和project2
    在这里插入图片描述
    5.新建两个角色test1和test2
    在这里插入图片描述
    6.数据库多建几个用户
    在这里插入图片描述
    7.之后将YII系统的登陆系统连接到我们的数据库中,更改protectedcomponentsUserIdentity这个文件,尤其是图中划线的这个方法一定要写。这个主要是什么意思呢,就是系统登陆的时候用的是我们的数据库中的账号和密码。
    在这里插入图片描述
    8.刚才我们的控制器中不是有3个方法吗,一个是index,一个是user,一个是admin之后我们设置只有admin用户能访问admin方法,只有demo用户能访问user方法,index方法先不设置。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    9.配置完毕,之后设置debug为false就是不调试了
    在这里插入图片描述
    10.之后访问index.php?r=cxy/user,就是访问user方法,访问的时候会自动跳到登陆界面,首先登陆admin测试
    在这里插入图片描述
    11.显示无权访问,因为我们刚才配置的时候是指定admin只能访问admin这个控制器的方法,那么我们访问admin这个控制器的方法
    在这里插入图片描述
    反之登陆用户demo,在测试一下
    在这里插入图片描述
    在这里插入图片描述

    0x04 总结

    写了这么多手都酸了,以上就是srbac的原理和如何使用,不想说了…

    PS:如果认为我这个博客有什么问题或者有修改意见的,请一定要告诉我,非常感谢(我的邮箱2412875746@qq.com)

  • 相关阅读:
    java 爬虫 爬取豆瓣 请不要害羞 图片
    Intellij idea 基本配置
    Linux 基本操作
    Java 快速排序
    Codeforces 986D Perfect Encoding FFT
    Codeforces 749E Gosha is hunting 二分+DP
    BZOJ5305 [Haoi2018]苹果树
    Codeforces 666E Forensic Examination SAM+权值线段树
    BZOJ3712[PA2014]Fiolki 建图+倍增lca
    Codeforces 576D Flights for Regular Customers 矩阵快速幂+DP
  • 原文地址:https://www.cnblogs.com/csnd/p/11800561.html
Copyright © 2020-2023  润新知