根据Spring Security中的某种所有权设置用户角色

Pre*_*hev 9 spring roles spring-security

在我的基于Spring的应用程序中,我目前有基本角色,如ADMIN和USER.

是否可以定义从USER继承的用户角色,如PHOTO_UPLOADER,还可以检查进行调用的用户是否实际上是照片的所有者?

我厌倦if (currentUser.id == photo.uploader.id)了一遍又一遍地在我的控制器动作中写同样的东西.它也适用于其他实体.

Ral*_*lph 12

您可以使用像Tomasz Nurkiewicz建议的ACL来处理它.但Spring Securitz ACL很复杂,记录很差.(我所知道的最好的资源是本书:Spring Security 3 - Spring Security的作者)

但如果你真的只需要这个简单的if (currentUser.id == photo.uploader.id)测试,那么我会推荐另一种技术.

可以增强可以在@PreAuthorize注释中使用它们的方法安全性表达式.喜欢:

@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Run Code Online (Sandbox Code Playgroud)

要实现这样的表达式isPhotoOwner,核心非常简单:

public class ExtendedMethodSecurityExpressionRoot extends MethodSecurityExpressionRoot {

    public ExtendedMethodSecurityExpressionRoot(final Authentication a) {
        super(a);
    }

    /**
     * 
     */
    public boolean isPhotoOwner(final Photo photoObject) {
        if (photoObject == null) {
            return false;
        }

        Photo photo = (photo) photoObject;
        return photo.getCreator().getLogin().equals(authentication.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,注册ExtendedMethodSecurityExpressionRoot还有一些额外的工作要做.--- 我现在没有时间,如果你愿意尝试这种做法,那就留下一份意见,我将描述其余的


Tom*_*icz 0

欢迎来到ACL的世界-访问控制列表教程相当旧,但非常全面。