对于 Grails, Spring Security和Shiro都有插件
使用 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 的经验,但我想它可以做同样的事情。