【问题标题】:What is the reason for having authorization rules in the database?数据库中有授权规则的原因是什么?
【发布时间】:2012-03-24 17:36:12
【问题描述】:

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

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

这是什么原因?

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

【问题讨论】:

    标签: php yii roles rbac


    【解决方案1】:

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

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

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

    “客人”有

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

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

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

    【讨论】:

    • 你能解释一下吗?为什么 bizRules 应该在数据库中,为什么不在你的代码中设置它们?
    • 如上所述...您可以将逻辑移动到 PHP 代码中,上述场景描述了具有大量分配角色(或任务或操作)的用例。如果您检查Access() 像“CanEditOwnPost”这样的项目,则必须检查 current 帖子是否属于用户,这不能通过“静态”条目来完成。要么在 PHP 代码中检查并分配项目然后......要么将 bizRule 添加到您的数据库中,它会为您执行此检查。
    • 它仍然没有意义,因为数据库中的代码是经过评估的。如果这是在控制器或其他东西中会更好。
    • 取决于您的需求,使用当前的解决方案,您可以通过管理界面添加逻辑,而不仅仅是通过源代码更改。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 非开发人员编辑代码的想法作为论据没有多大意义。
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2010-11-29
    • 2012-09-14
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多