菜单

Yii基于RBAC的权限系统

2016年6月20日 - Web
简单一点,这里我就不搬出一些理论概念进行摆设了,美其名曰言简意赅,直接击中要害吧。
基于RBAC的权限系统,就是一个用户被赋予某个角色,该角色拥有诸多权限,则这个用户在访问时不能进行超越该角色所具有权限的操作。具体来说,用户A,属于角色R,R具有“浏览”、“删除”两个权限,则用户只能进行浏览、删除操作,不能进行更新等角色R不具有权限的操作。

对应Yii应用,可以把控制器(Controller)的每个方法看作是一种权限,权限名称可写成“控制器类名/方法名”的形式,然后将这些权限分配给角色,将角色赋予用户,则用户每访问一个控制器方法,都要受到权限系统的控制。如果在每个控制器方法里面加上这些权限检查,代码冗余且影响美观,我们可以从yii\web\Controller继承一个控制器,如“class MyBaseController extends Controller”,其它的控制器都从MyBaseController继承,然后在MyBaseController的beforeAction中进行权限检查,这样权限检查代码只出现在一个地方,每个控制器方法被访问前beforeAction都会先执行权限检查,通过了才能继续访问控制器方法。在beforeAction中,可以通过权限名称进行检查,具体可如下:

$controller = Yii::$app->controller->id;
$action = Yii::$app->controller->action->id;

$permissionName = $controller.’/’.$action;

if(Yii::$app->user->can($permissionName)){

//用户具有权限则进入if
}
else{
//错误提示
}

管理员通过网站可以创建用户、创建角色、添加权限、将权限赋给角色、将用户和角色绑定,还有相应的删除解绑等操作,之后每个用户在访问网站的每个操作都受权限系统的限制,这样的权限系统对于一般的应用来说,已经算是非常灵活了。

 

发表评论