Grails或Play Framework的动态ACL?

时间:2012-04-05 17:28:55

标签: grails playframework acl

我准备将一个Java Swing应用程序移植到Web上。该应用程序是一个多业务应用程序,因此对于每个企业,它至少应该是一个管理员,并且该管理员可以为该企业的用户授予(对于每个模块)特权。

换句话说:我有模块账户,客户和发票,以及读写的权限。业务A有3个用户:John,Mike&玛丽。

John是管理员,并授予Mike read& amp;写访问客户和发票,但无权访问帐户,并授予Mary对帐户的读写访问权限,读取发票的访问权限以及无权访问客户。

我的问题是:是否有任何模块/插件可以为Play Framework或Grails执行此操作?如果没有,我该怎么做?

1 个答案:

答案 0 :(得分:2)

对于Grails,Spring SecurityShiro

都有插件

使用Spring Security,您可以在运行时创建角色,并在运行时将用户添加到角色。

有一个名为spring-security-ui的插件为您提供了执行此操作的GUI,但我认为它不适合您的用例,因为您可能不希望John授予访问除他自己以外的其他业务的权限。 Spring-security-ui更像是一个超级管理员GUI。但是,创建自己的用户界面以授予访问权限应该很容易。

您需要决定是否需要三个角色; ROLE_ADMIN,ROLE_READ和ROLE_WRITE,并添加额外的检查(例如过滤器)以检查用户是否正在尝试访问自己的业务。或者,如果您想为每个业务动态添加三个角色,即ROLE_BUSINESS1_ADMIN,ROLE_BUSINESS2_ADMIN等。

动态添加角色:

String roleName = ...
def role = Role.findByAuthority(roleName) ?: new Role(authority: roleName).save()

向用户添加角色:

PersonRole.create user, role, true

(在上面的示例中,域对象称为Person和Role,但您可以使用任何其他名称)

要动态地向URL添加访问规则,您需要使用Requestmap Instances Stored in the Database,或者您可以使用SpringSecurityUtils.ifAnyGranted(roles)

以编程方式检查访问权限

我对Shiro没有经验,但我想它可以做同样的事情。