扩展Phalcon ACL

时间:2014-03-29 05:10:28

标签: php security acl phalcon

phalcon的当前ACL正在管理角色资源及其操作之间的访问权限。例如,如果我们想要允许特定角色进入特定资源:

$acl->isAllowed("Guests", "Customers", "search");

检查名为“Guest”的角色是否可以访问“Customers”控制器以执行“搜索”操作。 在我的场景中,我们还有“角色级别”,例如,管理员可以访问所有模块和控制器,但是,要修改内容,管理员应该具有最低角色级别2.要获得修改网站配置的访问权限,管理员应该有角色等级3.

除角色级别外,我们还希望分配角色可以访问的模型。例如,A先生和B先生都是管理员,并且具有相同的级别。但是,我们决定只允许A先生访问“账户”模型,而B先生可以访问“账户”,“人员”等。

以下是我的问题:

  1. phalcon ACL是否支持角色和级别?或者,我应该创建自定义验证吗?

  2. 与创建类似的验证函数相比,使用ACL有什么好处?

  3. 如果我必须创建自定义验证,我应该把它放在哪里?在控制器中,还是在调度员中?

  4. THX

1 个答案:

答案 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

您可以轻松扩展此选项,以使控件/操作对的集合映射到角色。从那里你可以创建一个简单的函数来加载基于角色的资源。

这是一种解决方法,但它有效。