我有这样的场景:我拥有用户,组和许多不同的元素(模型),这些元素属于组,并且只能由具有活动成员资格的组中的用户访问。我有很多属于团体的模特。
所以基本上我需要检查用户和目标元素是否具有相同的group_id
如何使用Spring Security完成? 我一直在寻找类似的场景,但即使我已经找不到,我相信它很常见。
答案 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时调用: