在我的Yii应用程序中,我希望我的授权层次结构和业务规则用代码编写,我希望我的用户,角色和权限存储在数据库中。这将我的业务逻辑(应该是代码)与它应该使用的信息(应该是数据)分开。似乎Yii不支持这一点。
在Yii中,您可以选择将业务逻辑放入文件(CPhpAuthManager)或数据库(CdbAuthManager)。无论哪种方式,您都将业务逻辑视为数据; Yii实际上会将您的业务逻辑检索为字符串,然后通过eval
运行它,这似乎是一种可怕的方法。
这是什么原因?
我如何实现我想要的结果?
答案 0 :(得分:2)
您可以根据需要在业务逻辑的PHP代码中添加任意数量的逻辑。 Yii支持许多添加此逻辑的方法,例如。 LoginForm.php,UserIdentity.php,SiteController.php,...你不限于此。
Yii还支持为您的RBAC添加一段逻辑。一个常见的用例是,您默认将两个规则“Authenticated”和“Guest”分配给您网站的所有用户,但使用bizRules。 虽然'Authenticated'有一个类似
的bizRulereturn !Yii::app()->user->isGuest;
'访客'有
return Yii::app()->user->isGuest;
结果是,您登录的用户不再是“访客”,而是“已验证”。 另一个例子是编辑用户配置文件的视图,这些视图只能由当前用户编辑,例如
return $model->id === Yii::app()->user->id;
答案 1 :(得分:1)
为什么要在数据库和代码中放置任何内容?
一个很好的理由是非开发人员可以编辑它。
在我们的应用中,我们允许用户管理自己的用户和项目的权限。
您不必使用yii的rbac业务规则。您可以允许说几个不同的角色和任务,并在代码中使用其余的auth逻辑。