Grails的动态ACL还是Play框架?

Grails的动态ACL还是Play框架?,grails,playframework,acl,Grails,Playframework,Acl,我准备将一个JavaSwing应用程序移植到web。该应用程序是一个多业务应用程序,因此对于每个业务,它将至少有一名管理员,该管理员可以向业务用户授予权限(针对每个模块) 换句话说:我拥有模块账户、客户和发票,以及读写权限。该企业有3个用户:约翰、迈克和玛丽 John是管理员,授予Mike对客户和发票的读写权限,但不授予其对帐户的读写权限,授予Mary对帐户的读写权限,对发票的读写权限,而不授予其对客户的访问权限 我的问题是:是否有任何模块/插件可以为Play Framework或Grails实

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

换句话说:我拥有模块账户、客户和发票,以及读写权限。该企业有3个用户:约翰、迈克和玛丽

John是管理员,授予Mike对客户和发票的读写权限,但不授予其对帐户的读写权限,授予Mary对帐户的读写权限,对发票的读写权限,而不授予其对客户的访问权限


我的问题是:是否有任何模块/插件可以为Play Framework或Grails实现这一点?如果没有,我怎么做呢?

对于Grails,和都有插件

使用SpringSecurity,您可以在运行时创建角色,并在运行时向角色添加用户

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

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

要动态添加角色,请执行以下操作:

String roleName = ...
def role = Role.findByAuthority(roleName) ?: new Role(authority: roleName).save()
要向用户添加角色,请执行以下操作:

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

要向URL动态添加访问规则,您需要使用,或者您可以使用
SpringSecurityUtils.ifanygrated(roles)

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