【发布时间】:2013-04-27 03:46:28
【问题描述】:
我正在开发一个完全出于娱乐和教育目的的自定义框架。我已经阅读了this question 关于如何实现权限的内容,我喜欢这些答案;使用装饰器模式和/或根据调度程序的 URL 检查权限。
我的问题是应该如何生成权限白名单?我不希望我的控制器中的 每个 方法都需要执行权限,因此我可以使用特殊的命名约定,例如在方法名称前加上“x”:
class CalendarController
{
public function index($year = null, $month = null, $day = null)
{
// display calendar (no permission needed)
}
public function xAddEvent()
{
// display form to add event (permission required)
}
public function xAddEventSubmit()
{
// submit form to add event (permission required)
}
}
然后我可以编写一个脚本来遍历我的所有控制器并返回 x 方法,给我分配给不同角色的权限列表。
另一种选择是将权限硬编码为每个控制器的属性,例如:
class CalendarController
{
public $permissions = array('addEvent',
'addEventSubmit');
public function index($year = null, $month = null, $day = null)
{
// display calendar (no permission needed)
}
public function addEvent()
{
// display form to add event (permission required)
}
public function addEventSubmit()
{
// submit form to add event (permission required)
}
}
有没有更好的选择,或者我是否走在正确的轨道上?
【问题讨论】:
-
@tereško 我在第一段中链接到那篇文章。它没有解决我的问题。
-
对不起.. 错过了。不过,您的两个示例似乎都将 ACL 的负担放在您的控制器上。访问权限应存储在您的控制器之外。我会使用一些“config/permissions.php”文件。还要记住,在某些系统中,您需要提供 GUI(如在不同的 CMS 中)来管理其中的一些权限。
-
@tereško 是的,这正是我想要做的。我想为我的管理页面生成权限列表。问题是如何以有效的方式生成该列表。我倾向于抓取控制器的原因是避免在其他地方硬编码权限。 “角色”将存储在数据库中,但附加到这些角色的“权限”是我试图在此处动态列出的内容。
标签: php oop model-view-controller acl rbac