在数据库中拥有授权规则的原因是什么?

时间:2012-03-07 07:20:05

标签: php yii roles rbac

在我的Yii应用程序中,我希望我的授权层次结构和业务规则用代码编写,我希望我的用户,角色和权限存储在数据库中。这将我的业务逻辑(应该是代码)与它应该使用的信息(应该是数据)分开。似乎Yii不支持这一点。

在Yii中,您可以选择将业务逻辑放入文件(CPhpAuthManager)或数据库(CdbAuthManager)。无论哪种方式,您都将业务逻辑视为数据; Yii实际上会将您的业务逻辑检索为字符串,然后通过eval运行它,这似乎是一种可怕的方法。

这是什么原因?

我如何实现我想要的结果?

2 个答案:

答案 0 :(得分:2)

您可以根据需要在业务逻辑的PHP代码中添加任意数量的逻辑。 Yii支持许多添加此逻辑的方法,例如。 LoginForm.php,UserIdentity.php,SiteController.php,...你不限于此。

Yii还支持为您的RBAC添加一段逻辑。一个常见的用例是,您默认将两个规则“Authenticated”和“Guest”分配给您网站的所有用户,但使用bizRules。 虽然'Authenticated'有一个类似

的bizRule
return !Yii::app()->user->isGuest;

'访客'有

return Yii::app()->user->isGuest;

结果是,您登录的用户不再是“访客”,而是“已验证”。 另一个例子是编辑用户配置文件的视图,这些视图只能由当前用户编辑,例如

return $model->id === Yii::app()->user->id;

答案 1 :(得分:1)

为什么要在数据库和代码中放置任何内容?

一个很好的理由是非开发人员可以编辑它。

在我们的应用中,我们允许用户管理自己的用户和项目的权限。

您不必使用yii的rbac业务规则。您可以允许说几个不同的角色和任务,并在代码中使用其余的auth逻辑。