如果对象属于用户,则用户只能调用方法

时间:2012-11-13 20:11:51

标签: java jsf acl

在CRUD jsf应用程序中,所有者拥有对象,如记录。

我希望所有者只能查看/编辑/删除自己创建的对象。实现此目的的一种方法是在每个方法中检查对象是否已由记录的用户创建。

可以有许多类似的方法和对象,所以我想使用另一种优雅/自动的方式而不是使用

if (selectedObject.owner == loggedUser)

每种方法中的短语。

是否有可能,如果可能的话?

2 个答案:

答案 0 :(得分:2)

您可以使用aspect oriented programming进行访问保护。

我会编写一个方面来拦截对访问受限方法的所有方法调用,在建议之前应用检查并在失败时抛出异常。根据程序的结构,通过查找显式注释或使用相当通用的切入点。

这会将您的if (obj.owner.equals(loggedUser))移到一个中心位置,但当然您仍需要注意不要在列表等中包含其他用户的项目。

“Java方面实现是AspectJ。 Spring框架也使用和支持它,您可能已经使用它:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html

答案 1 :(得分:0)

如果我是你,只有在用户获得授权的情况下才会显示组件

rendered={user.isOwner}

您将在组件中将其用作属性。