深入解析yii权限分级式访问控制的实现(非RBAC法
Yii框架中的权限分级式访问控制:深入理解与实现
Yii框架为我们提供了两种权限访问系统:简单的filter模式和全面复杂的RBAC模式。本文将重点介绍filter模式,因为这种模式在Yii的官方demo blog中有广泛应用。如果你对Yii官方的demo blog有所了解,尤其是通过gii自动生成的user模块,你会接触到这种简单的filter权限分配功能。详细的操作细节,你可以参考blog手册的“用户验证”章节以及Yii官方指南的“验证和授权”章节。
在Yii的权限控制系统中,关于权限分配的文件大多位于controllers文件夹内。以UserController.php为例,你会看到两个关键的类方法:filters()和accessRules()。
filters()方法定义了实现CRUD操作的访问控制,例如只允许特定用户执行create、update、admin和delete等操作。而accessRules()方法则是访问规则的设置,它定义了不同用户对不同动作的访问权限。例如,允许所有用户执行index和view动作,只允许经过验证的用户执行create和update动作,只允许名为admin的用户执行admin和delete动作。这种方式主要是通过硬编码的形式分配用户权限。
为了更好地实现权限分配,我们希望filter访问控制模式能够更完美地按照数据库中的用户信息来实施授权。在demo blog的tbl_user表中,我们可以增加一个role字段,根据用户的角色来分配不同的权限。接下来,我们需要进行三个关键步骤来实现这一功能:
1. 创建组件WebUser,它是CWebUser的扩展。这个组件将帮助我们更好地管理和识别用户信息。
2. 修改config/main.php文件。这个文件是Yii框架的配置文件,我们需要在这里配置我们的WebUser组件,使其能够正确地读取数据库中的用户信息。
3. 修改accessRules()方法。在这个方法中,我们不再使用硬编码的方式来定义用户权限,而是根据WebUser组件读取的数据库中的用户角色来动态设置。这样,我们就可以根据数据库中不同级别用户的role值来实施不同的授权。
WebUser.php组件的深入解读与修改指南
在我们深入WebUser.php组件的代码之前,让我们确保此文件存放在正确的位置:protected/components/WebUser.php。这里,我们有一个WebUser类,它是CWebUser的扩展。让我们逐行解读它的核心功能。
一、WebUser类的主要特性
这个类扩展了CWebUser的功能,其中包含一些自定义的方法,帮助用户更灵活地管理用户权限和身份信息。这个类中有几个关键的功能和方法需要我们关注。
二、细节解读
1. `_model`的存储:为了避免重复查询,这个类有一个私有变量`_model`来存储用户模型。这样可以提高效率和性能。
2. 获取名字的方法:`getFirst_Name()`方法通过加载用户模型并返回与当前用户ID相关联的用户的名字。我们可以使用`Yii::app()->user->first_name`来访问这个功能。
3. 管理员权限检查:`isAdmin()`函数检查用户模型的'role'字段是否等于1,这意味着该用户是管理员。我们可以通过`Yii::app()->user->isAdmin()`来调用这个函数。
4. 用户模型的加载:`loadUser()`函数用于加载用户模型。如果模型尚未加载,它将根据提供的ID(如果已提供)加载用户模型。
三、在config/main.php中的配置
在main.php配置文件中,我们需要找到'components'数组,并在'user'部分添加一些配置。特别是,我们需要设置'class'为'WebUser',并启用cookie基于的认证('allowAutoLogin'=>true)。这样我们就可以在应用程序中使用我们自定义的WebUser组件了。
四、Controller层的权限修改
要更改权限设置,我们需要找到需要更改权限的controller类,并对`accessRules()`函数进行修改。这个函数用于设置访问规则。例如,我们可以允许所有用户执行index和view动作,只允许经过验证的用户执行create和update动作。我们可以通过添加或修改数组中的规则来实现这些更改。
我们定义了几个动作权限,这些动作包括创建、更新、管理以及删除。这些动作权限就像是我们网站的几个重要门户,我们需要控制哪些用户可以进入这些门户。
对于大多数注册用户来说,他们拥有创建和更新的基本权利,这就好比网站的门敞开给他们,允许他们进行一些基础操作。具体来说,这里的'@'符号就像一把万能的钥匙,代表着所有注册的用户,他们可以自由地出入创建和更新的门户。
只有特定的管理员用户才能执行管理和删除动作。这就像网站中的某些重要房间,只有管理员才能进入。为了验证用户的身份,我们使用了Yii框架中的用户模块来判断用户是否具有管理员权限。只有当用户被标识为管理员时,才能执行管理和删除动作。这就像一扇电子门,只有输入正确的密码才能打开。
我们还有一个拒绝所有访问的权限设置。这就像一道安全屏障,防止未经授权的人员闯入。这里通过指定一个空的用户列表来表示拒绝所有未授权的访问。如果有人试图闯入,这个设置就会像一个警报系统一样立即启动。
这样,我们的工作就完成了!现在我们可以使用Cambrian渲染引擎的body方法来展示这些内容了。这样写代码既保证了安全,又使得代码更加生动和吸引人。每个权限设置都像一个故事中的关卡,只有通过了验证的用户才能继续前行。
编程语言
- 深入解析yii权限分级式访问控制的实现(非RBAC法
- XML与HTML的结合(下)
- jQuery on()绑定动态元素出现的问题小结
- PHP连接数据库实现注册页面的增删改查操作
- Bootstrap入门书籍之(一)排版
- PHP实现可精确验证身份证号码的工具类示例
- PHP sdk文档处理常用代码示例解析
- js实现带按钮的上下滚动效果
- ASP.Net MVC+Data Table实现分页+排序功能的方法
- JSP实现的简单分页示例
- jQuery层级选择器实例代码
- 详解ES6中的let命令
- php正则表达式使用的详细介绍
- JS关于刷新页面的相关总结
- JS实现自动变换的菜单效果代码
- ASP.NET MVC+EF框架+EasyUI实现权限管系列