Grails 使用spring security的网站的组权限-设计查询

Grails 使用spring security的网站的组权限-设计查询,grails,spring-security,Grails,Spring Security,我正在创建一个Grails网站,用户可以访问他们创建的资源。在这之前,一切对我来说都很清楚。我使用Config.groovy文件定义ROLE\u USER并锁定我的控制器和操作 我面临的问题是,我需要支持一组用户,这样一个用户创建的某些资源就可以被同一组的其他用户编辑/更新/删除。在spring security中,如何将用户与“组”相关联,我应该在这里使用什么样的设计/库?我不认为spring security提供了现成的功能,因此您必须手动执行。 对于使用这种功能的每个域类,存储当前登录用户

我正在创建一个Grails网站,用户可以访问他们创建的资源。在这之前,一切对我来说都很清楚。我使用
Config.groovy
文件定义
ROLE\u USER
并锁定我的控制器和操作


我面临的问题是,我需要支持一组用户,这样一个用户创建的某些资源就可以被同一组的其他用户编辑/更新/删除。在spring security中,如何将用户与“组”相关联,我应该在这里使用什么样的设计/库?

我不认为spring security提供了现成的功能,因此您必须手动执行。 对于使用这种功能的每个域类,存储当前登录用户的用户名

def authenticateService

def user = authenticateService.principal() 
entity.setUser(user?.getUsername())
然后在控制器的更新/删除方法中,您应该检查当前登录用户的角色是否匹配 创建实体的用户的角色。如果有匹配项,则应继续更新/删除,否则将引发异常 /将用户重定向到错误页面


作为角色,您可以使用spring安全角色,也可以在已创建的用户对象上创建属性,您需要做的是让用户的角色(授权)来自数据库。一旦出现这种情况,您就可以轻松地调整用户(或一组用户)的角色,并动态创建/删除它们。这些文档中有一些关于如何从数据库中获取角色的非常好的信息,所以我在这里不再赘述

但是,一旦动态角色就位,您仍然需要能够将角色连接到所创建的对象。基本上有两种方法可以做到这一点:

  • 访问控制列表
  • 自定义逻辑
  • 根据您需要的粒度和灵活性,一个选项可能比另一个更具吸引力

    访问控制列表本质上允许您在每个用户和每个实体实例之间进行权限映射。正如您可以想象的那样,如果您有大量的实体和用户,这将是一个相当大的开销,并且性能可能会很差


    另一方面,将您自己的逻辑组合在一起更加灵活,因为您可以设置自己的方案,将实体实例或实体类连接到用户及其角色。

    每当有人启动“组”时,使用角色的问题需要将新角色动态分配给这组用户,这听起来不可行。我明白了吗?我不知道我是否明白。在我看来,这是引入新角色时的正常过程,应该将其分配给某些用户。