phalcon的当前ACL正在管理角色,资源及其操作之间的访问权限。例如,如果我们想要允许特定角色进入特定资源:
$acl->isAllowed("Guests", "Customers", "search");
检查名为“Guest”的角色是否可以访问“Customers”控制器以执行“搜索”操作。 在我的场景中,我们还有“角色级别”,例如,管理员可以访问所有模块和控制器,但是,要修改内容,管理员应该具有最低角色级别2.要获得修改网站配置的访问权限,管理员应该有角色等级3.
除角色级别外,我们还希望分配角色可以访问的模型。例如,A先生和B先生都是管理员,并且具有相同的级别。但是,我们决定只允许A先生访问“账户”模型,而B先生可以访问“账户”,“人员”等。
以下是我的问题:
phalcon ACL是否支持角色和级别?或者,我应该创建自定义验证吗?
与创建类似的验证函数相比,使用ACL有什么好处?
如果我必须创建自定义验证,我应该把它放在哪里?在控制器中,还是在调度员中?
THX
答案 0 :(得分:3)
目前,Phalcon不支持基于角色的ACL。你必须自己做一些事情来掩盖这一点。然而,该要素已被要求,并且它在该项目的NFR的长列表中:)
我将采用Phalcon功能和自定义编程的方式。我会将所有内容添加到beforeExecuteRoute
函数中的基本控制器中,以便每当要调度某些内容时都会检查ACL。
在与您类似的项目中,我在我的数据库中创建了两个表:
Groups
------
group_id <- 2
group_name <- Admins
并有一个ACL表,将所有操作映射到像这样的组
ACL
---
group_id <- 2
acl_controller <- Customers
acl_action <- Search
您可以轻松扩展此选项,以使控件/操作对的集合映射到角色。从那里你可以创建一个简单的函数来加载基于角色的资源。
这是一种解决方法,但它有效。