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

Kie*_*ews 10 php roles rbac yii

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

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

这是什么原因?

我怎样才能达到我想要的结果?

sch*_*unk 2

您可以将任意数量的逻辑放入 PHP 代码中以实现业务逻辑。Yii 支持多种添加此逻辑的方法,例如。LoginForm.php、UserIdentity.php、SiteController.php...您不限于此。

Yii 还支持向 RBAC 添加逻辑片段。一个常见的用例是,默认情况下,您将“Authenticated”和“Guest”这两个规则分配给站点的所有用户,但使用 bizRules。虽然“Authenticated”有一个 bizRule 就像

return !Yii::app()->user->isGuest;
Run Code Online (Sandbox Code Playgroud)

‘客人’有

return Yii::app()->user->isGuest;
Run Code Online (Sandbox Code Playgroud)

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

return $model->id === Yii::app()->user->id;
Run Code Online (Sandbox Code Playgroud)