10

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

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

这是什么原因?

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

4

2 回答 2

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;
于 2012-03-09T23:30:41.277 回答
1

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

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

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

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

于 2012-04-25T03:28:30.250 回答