首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails或Play Framework的动态ACL?

Grails或Play Framework的动态ACL?
EN

Stack Overflow用户
提问于 2012-04-06 01:28:55
回答 1查看 615关注 0票数 2

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

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

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

我的问题是: Play Framework或Grails有没有什么模块/插件可以做到这一点?如果没有,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-06 01:45:56

对于Grails,有用于Spring SecurityShiro的插件

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

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

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

要动态添加角色:

代码语言:javascript
复制
String roleName = ...
def role = Role.findByAuthority(roleName) ?: new Role(authority: roleName).save()

要向用户添加角色:

代码语言:javascript
复制
PersonRole.create user, role, true

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

要将访问规则动态添加到URL,您需要使用Requestmap Instances Stored in the Database,或者可以使用SpringSecurityUtils.ifAnyGranted(roles)以编程方式检查访问

我没有使用Shiro的经验,但我猜它可以做同样的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10033168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档