授予所有用户(注册和匿名)对象读取权限的最佳方法是什么?我正在一个系统上工作,用户可以创建任何人都可以查看但只能由创建者或管理员用户编辑的项目。

我想到的一个解决方案是Spring为未经身份验证的用户赋予ROLE_ANONYMOUS角色,我可以将其更改为ROLE_USER,然后再将其授予我的所有经过身份验证的用户,这样每个人都是ROLE_USER。然后,所有可公开查看的实体都将获得针对ROLE_USER插入的READ权限,然后我可以使用组(GrantedAuthoritySid)来确定您是否可以访问(每个人都可以访问)。

我想知道是否有更好的方法可以在不对每个公共对象授予ROLE_USER读取权限的情况下实现?

最佳答案

如果任何人都可以查看有问题的对象,则无需对它们应用ACL。仅将ACL应用于修改此类对象的操作。

如果每个对象的可见性(公共/私有)是可配置的,则可以为其使用专用标志,并通过该标志(例如,通过expression-based access control)来驱动可见性。

但是,如果您也想对此类对象使用ACL,则可以创建专用角色(例如ROLE_READER),并在身份验证时将角色动态分配给匿名用户和已身份验证的用户。

请参见可以使用默认权限(在您的情况下为ROLE_READER)配置为分配给所有用户的类org.springframework.security.core.authority.mapping.SimpleAuthorityMapper。然后在身份验证过程中使用映射器。由于您未指定用户的身份验证方式,因此我假设用户名/密码架构和默认org.springframework.security.authentication.dao.DaoAuthenticationProvider。如果仔细查看该类,您会发现可以设置要使用的权限映射器。

对于匿名用户,可以将默认权限设置为org.springframework.security.web.authentication.AnonymousAuthenticationFilter的构造函数参数。

09-16 06:55