我有这些实体:
用户有很多角色,角色有很多权限。
检索用户拥有的一组权限的最佳方法是什么?
我需要一种方法来检查用户是否具有特定的权限。
这是我到目前为止所做的:
public boolean hasPermission(String permissionString) {
if (!authenticated) return false;
for (Role role : user.getRoles()) {
for (Permission permission : role.getPermissions()) {
if (permission.getName().equals(permissionString)) {
return true;
}
}
}
return false;
}
第二个但相关的问题 - 我应该在哪里放置检查用户是否拥有特定权限的代码?
答案 0 :(得分:1)
这取决于您的映射,列表中的对象数,是否已获取列表,数据库连接,数据库调整等。
您必须尝试使用生产数据来确定最佳方法。
例如,如果您的集合已经使用连接查询预取,那么在Java中遍历它们是微不足道的。如果他们没有,那么for循环中的每次访问都会导致查询填充对象。如果它始终是最后一个,那就意味着你的java代码会以最坏的方式遍历你的对象图,而且最好先提取它。因此,您将失去延迟访问的任何好处,并且最好一次使用permissionString名称查询链接到此用户的权限:"从用户加入u.roles r join r中选择p .permissions p其中p.name =:permissionName"。
只有对生产数据进行测试才能为您的情况提供最佳答案,应用程序和映射中的许多其他决策都会改变结果。