如何根据用户和目标元素GROUP_ID授权操作?

时间:2017-03-13 22:46:54

标签: spring spring-boot spring-security

我有这样的场景:我拥有用户,组和许多不同的元素(模型),这些元素属于组,并且只能由具有活动成员资格的组中的用户访问。我有很多属于团体的模特。

所以基本上我需要检查用户和目标元素是否具有相同的group_id

如何使用Spring Security完成? 我一直在寻找类似的场景,但即使我已经找不到,我相信它很常见。

1 个答案:

答案 0 :(得分:0)

Spring Security提供完整的授权框架:
http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html

它使用@PreAuthorize之类的注释来检查是否允许经过身份验证的用户调用该方法。

这里使用spring方法hasRole:

@PreAuthorize("hasRole('USER')")
public void create(Contact contact);

如果仅使用默认弹簧方法无法处理授权逻辑,则可以创建自定义实现:

@PreAuthorize("@patientAuth.readObject(authorization,#patientId)")
    public Patient getPatient(Long patientId) {
        Patient patient = patientDao.findOne(patientId);
        if(patient==null) throw new NotFoundException("Patient not found");
        return patient;
    }

方法getPatient只能在方法patientAuth.readObject返回true时调用: