2

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

换句话说:我有模块帐户、客户和发票,以及读写权限。企业 A 有 3 个用户:John、Mike 和 Mary。

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

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

4

1 回答 1

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 的经验,但我想它可以做同样的事情。

于 2012-04-05T17:45:55.763 回答