2015-10-27 57 views
0

我甚至不知道这个问题的标题是否正确 - 如果不是,请原谅。我有这样的问题:Java - 用户对象访问控制

我的web应用程序只能被登录用户访问。每个用户被表示为保存在数据库中的User实体。

还有一些其他实体类:AB,C ...也保存在数据库中。类别AB ...的每个对象都可以由任何用户创建。 但user1不应该看到由user2创建的对象。

问:

我怎么能做出这样的访问控制?

我天真的想法:

我可以(在数据库表的情况下,列)添加User属性为每个实体类。在创建对象时,此属性将采用当前用户标识。到目前为止,对我来说没问题。但是,我必须将当前用户添加到每个数据库选择。这在某些方面有问题。

例如,使用Spring JPA代替:

public interface MessageRepository extends JpaRepository<Message, Long> { 
    List<Message> findByReceiveDateBetween(Date from, Date to); 
} 

我必须使用:

public interface MessageRepository extends JpaRepository<Message, Long> { 
    List<Message> findByReceiveDateBetweenAndUser(Date from, Date to, User user); 
} 

我的应用程序是用Java编写与春天。

这种访问控制是如何实现的?

+0

这听起来像你已经知道如何做到这一点。为什么将当前用户添加到每个数据库选择是一个问题?当然,这是一个额外的打字,但如果你想根据用户进行选择,你必须这样做。 – forgivenson

+0

这个操作是例行的(可重复的),所以我认为有一些更好的方法不用手动向用户添加'user'。此外,我听说有关ACL的一些事情,所以我认为也许有人可以提出比我的天真更好的解决方案。 – jsosnowski

回答

0

您绝对需要在数据库级别为每个实体标记其创建者的ID。