【发布时间】:2014-10-02 06:44:11
【问题描述】:
我正在寻找有关如何在用 PHP 编写的网站上实现用户权限的建议。目前,这是我的策略:
- 具有 PagePermissions 类型数组的 User 类
- 具有 ActionPermissions 类型成员的 Page Permissions 类和一个方法“checkAction”,如果允许该操作,则返回 true/false
- 每个操作权限都被命名并具有允许、拒绝或未定义的值。
创建/修改用户时,会设置他们的权限。登录时,用户对象被加载到 $_SESSION。对于每个请求,将相应的 PagePermissions 对象加载到 GLOBAL 中,然后每个视图都有:
<?php
include 'header.php'
?>
<!-- Some HTML code for the view -->
<!-- ... -->
<?php if($GLOBAL['pagePermissions']->checkAction('Admin-Only-Action')) { ?>
<a href="#adminAction">Admin-Only-Action</a>
<? } ?>
<!-- Some HTML code for the view -->
<!-- ... -->
<?php
include 'footer.php'
?>
我在每个视图后面也有一个控制器,如果它被发布,则具有类似的逻辑来允许/拒绝该操作。
有没有更好的方法,可以让我从我的(主要是)HTML 视图中抽象出 spaghetii PHP 代码?我可以创建基于用户权限呈现/不呈现的 PHP“标签”吗?是否有一些合成糖可以使这个更干净?
如果需要,我可以提供更多详细信息或代码示例。
谢谢
【问题讨论】:
-
您可以为此使用 FRONT 控制器模式。这个 FRONT 控制器将被每个控制器继承,您可以在 FRONT 控制器本身完成调度后检查每个操作的权限。
-
根据我收到的继承项目,我要么大量使用包含,要么大量使用对象。对于包含,我会执行以下操作: include 'everyone_menu.inc';包括“admin_menu.inc”;包括“editor_menu.inc”;然后,我将包含包含在“if”中以控制包含的内容。使用对象,我制作了一个菜单对象。在里面我有每个菜单的方法和一个使用 if 语句来决定显示哪个菜单的 show_menu 方法。
标签: php html privileges