在 CRUD jsf 应用程序中,所有者拥有对象,例如记录。
我希望所有者只能查看/编辑/删除自己创建的对象。实现此目的的一种方法是在每种方法中检查登录用户是否已创建对象。
可以有很多类似的方法和对象,所以我想使用另一种优雅/自动的方式而不是使用
if (selectedObject.owner == loggedUser)
每种方法中的短语。
有可能吗,如果可能的话怎么办?
您可以使用面向方面的编程来进行访问保护。
我会编写一个方面来拦截对访问受限方法的所有方法调用,在之前的建议中应用检查,如果失败则抛出异常。根据程序的结构,或者通过寻找显式注释或使用相当通用的切入点。
这会将您移动if (obj.owner.equals(loggedUser))
到一个中心位置,但当然您仍然需要注意不要将其他用户的项目包含在列表等中。
“该”Java 方面实现是AspectJ。它也被 Spring 框架使用和支持,你可能已经在使用它:http: //static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html
如果我是你,我只会在用户被授权的情况下显示组件,通过使用
rendered={user.isOwner}
您将使用它作为组件中的属性。