在开发一个有多种用户的网络应用时,对权限的判断总是一个很麻烦的事情。
Yii支持RBAC(Role-Based Access Control),结合filter,就给我们提供了非常简单方便的权限控制方法。
其实RBAC的原理很简单。
先梳理一下默认的Yii的授权filter:accessControl。它是根据accessRules按照用户的身份(users)来验证并授权的,默认的有*(任何用户),@(通过登录验证的用户),admin(管理员)。通过一系列这些accessRules,指定了这三种身份用户的各自可调用的action的权限。
而RBAC和默认的按照users的原理一样。通过指定”roles”来限定对应角色用户的可用action的权限。用”roles”替换”users”即可,因为Yii的accessControl是支持roles的。通过这种方式,在Contoller内部,通过指定accessRules就可以控制权限。在其他地方,比如控制一些view的显示的时候,可以用Yii::app()->user->checkAccess(role)来进行权限判断。
RBAC本身也有特别之处。看官方的一段原话:
在Yii的RBAC的一个基本概念是authorization item(授权项目)。一个授权项目是一个做某事的许可(如创造新的博客发布,管理用户)。根据其粒度和targeted audience, 授权项目可分为operations(行动),tasks(任务)和 roles(角色)。角色包括任务,任务包括行动,行动是许可是个原子。 例如,我们就可以有一个