数据库中存在授权规则的原因是什么


What is the reason for having authorization rules in the database?

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

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

这是什么原因?

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

您可以为业务逻辑在PHP代码中放入任意数量的逻辑。Yii支持许多添加此逻辑的方法,例如LoginForm.php、UserIdentity.php、SiteController.php……您在这里不受限制。

Yii还支持在RBAC中添加一段逻辑。一个常见的用例是,默认情况下,您将"Authenticated"answers"Guest"这两个规则分配给站点的所有用户,但使用bizRules。而"Authenticated"有一个类似的bizRule

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

"客人"有

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

结果是,您的登录用户不再是"Guests",而是"Authenticated"。另一个例子是编辑用户配置文件的视图,这些视图只能由当前用户编辑,如

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

为什么要把任何东西放在数据库和代码中?

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

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

您不必使用yii的rbac业务规则。您可以允许一些不同的角色和任务,并在代码中包含其余的身份验证逻辑。