我正准备将一个Java Swing应用程序移植到web上。该应用程序是一个多业务应用程序,因此对于每个业务,它将至少有一个管理员,并且该管理员可以向该业务的用户授予特权(针对每个模块)。
换句话说:我有帐号、客户和发票模块,还有读写权限。企业A有3个用户: John、Mike和Mary。
John是管理员,他授予Mike对客户和发票的读写访问权限,但对帐户没有访问权限,授予Mary对帐户的读写访问权限,对发票的读访问权限,对客户没有访问权限。
我的问题是: Play Framework或Grails有没有什么模块/插件可以做到这一点?如果没有,我该怎么做呢?
发布于 2012-04-06 01:45:56
对于Grails,有用于Spring Security和Shiro的插件
使用Spring Security,您可以在运行时创建角色,并在运行时将用户添加到角色。
有一个名为spring-security-ui的插件为你提供了一个图形用户界面来做这件事,但我不认为它适合你的用例,因为你可能不希望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的经验,但我猜它可以做同样的事情。
https://stackoverflow.com/questions/10033168
复制相似问题