加入具有@ManyToMany 关系的实体
Joining entities with @ManyToMany relationship
我有这些实体:
- 用户
- 角色
- 权限
一个用户有多个角色,一个角色有多个权限。
检索用户拥有的一组权限的最佳方法是什么?
我需要一种方法来检查用户是否具有特定权限。
这是我目前拥有的:
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;
}
第二个相关问题 -- 我应该将检查用户是否具有特定权限的代码放在哪里?
- 在用户实体中?
- 在 UserBean EJB 中?
- 在身份验证 JSF 托管 Bean 中?
这取决于您的映射、列表中的对象数量、列表是否已被提取、您的数据库连接、数据库调优等。
您将不得不尝试使用生产数据来确定最佳方法。
例如,如果您的集合已通过连接查询预取,那么在 Java 中遍历它们就很简单了。如果没有,for 循环中的每次访问都会导致查询填充对象。如果它一直是最后一个,则意味着您的 java 代码会导致您以最糟糕的方式遍历对象图,最好提前获取它。因此,您将失去惰性访问的任何好处,最好访问数据库一次以查询链接到此用户的权限,权限字符串名称:"Select p from u User join u.roles r join r.permissions p where p.name = :permissionName"。
只有对生产数据进行测试才能为您的情况提供最佳答案,而应用程序和映射中的许多其他决策会改变结果。
我有这些实体:
- 用户
- 角色
- 权限
一个用户有多个角色,一个角色有多个权限。
检索用户拥有的一组权限的最佳方法是什么?
我需要一种方法来检查用户是否具有特定权限。
这是我目前拥有的:
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;
}
第二个相关问题 -- 我应该将检查用户是否具有特定权限的代码放在哪里?
- 在用户实体中?
- 在 UserBean EJB 中?
- 在身份验证 JSF 托管 Bean 中?
这取决于您的映射、列表中的对象数量、列表是否已被提取、您的数据库连接、数据库调优等。
您将不得不尝试使用生产数据来确定最佳方法。
例如,如果您的集合已通过连接查询预取,那么在 Java 中遍历它们就很简单了。如果没有,for 循环中的每次访问都会导致查询填充对象。如果它一直是最后一个,则意味着您的 java 代码会导致您以最糟糕的方式遍历对象图,最好提前获取它。因此,您将失去惰性访问的任何好处,最好访问数据库一次以查询链接到此用户的权限,权限字符串名称:"Select p from u User join u.roles r join r.permissions p where p.name = :permissionName"。
只有对生产数据进行测试才能为您的情况提供最佳答案,而应用程序和映射中的许多其他决策会改变结果。