Я изо всех сил пытаюсь найти способ извлечь роли, унаследованные через группы.
Я создал группу, mygroup и роль mygrouprole, назначил пользователей mygroup и назначил mygroup mygrouprole.Когда я нажимаю на пользователя, я вижу, что он унаследовал mygrouprole.
На моей странице jsp я звоню com.myco.UserUtil.hasRole(Long userId, String role)
.
Это прекрасно работает, когда пользователь назначен непосредственно на роль., но не транзитивно через группу.
public static boolean hasRole(Long userID, String role) {
boolean blnFound = false;
try {
List<Role> lstRoles = RoleServiceUtil.getUserRoles(userID);
m_logger.info("RoleServiceUtil.getUserRoles");
for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
Role rlRole = iterator.next();
m_logger.info(rlRole.getName());
if (rlRole.getName().equals(role)) {
blnFound = true;
m_logger.debug("User " + Long.toString(userID) + " has role " + role);
break;
}
}
} catch (Exception e) {
...
}
}
До сих пор я пробовал несколько альтернативных функций, но ни одна из них, похоже, не в состоянии найти роль.
public static boolean hasRole(Long userID, String role) {
boolean blnFound = false;
try {
List<Role> lstRoles = RoleServiceUtil.getUserRoles(userID);
m_logger.info("RoleServiceUtil.getUserRoles");
for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
Role rlRole = iterator.next();
m_logger.info(rlRole.getName());
if (rlRole.getName().equals(role)) {
blnFound = true;
m_logger.debug("User " + Long.toString(userID) + " has role " + role);
break;
}
}
lstRoles = RoleLocalServiceUtil.getUserRoles(userID);
m_logger.info("RoleLocalServiceUtil.getUserRoles");
for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
Role rlRole = iterator.next();
m_logger.info(rlRole.getName());
if (rlRole.getName().equals(role)) {
blnFound = true;
m_logger.debug("User " + Long.toString(userID) + " has role " + role);
break;
}
}
lstRoles = RoleLocalServiceUtil.getUserRelatedRoles(userID,CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId());
m_logger.info("RoleLocalServiceUtil.getUserRelatedRoles");
for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
Role rlRole = iterator.next();
m_logger.info(rlRole.getName());
if (rlRole.getName().equals(role)) {
blnFound = true;
m_logger.debug("User " + Long.toString(userID) + " has role " + role);
break;
}
}
List<UserGroupRole> lstUGRoles = UserGroupRoleLocalServiceUtil.getUserGroupRoles(userID);
m_logger.info("UserGroupRoleLocalServiceUtil.getUserGroupRoles");
for (Iterator<UserGroupRole> iterator = lstUGRoles.iterator(); iterator.hasNext();) {
UserGroupRole rlRole = iterator.next();
m_logger.info(rlRole.getRole().getName());
if (rlRole.getRole().getName().equals(role)) {
blnFound = true;
m_logger.debug("User " + Long.toString(userID) + " has role " + role);
break;
}
}
blnFound = UserGroupRoleLocalServiceUtil.hasUserGroupRole(
userID,
// TODO: this only works when there is one company
CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
role
);
m_logger.info("UserGroupRoleLocalServiceUtil.hasUserGroupRole:"+Boolean.toString(blnFound));
blnFound = UserGroupRoleLocalServiceUtil.hasUserGroupRole(
userID,
// TODO: this only works when there is one company
CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
role,
true
);
m_logger.info("UserGroupRoleLocalServiceUtil.hasUserGroupRole:"+Boolean.toString(blnFound));
blnFound = RoleLocalServiceUtil.hasUserRole(
userID,
// TODO: this only works when there is one company
CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
role,
true
);
m_logger.info("RoleLocalServiceUtil.hasUserRole:"+Boolean.toString(blnFound));
blnFound = RoleLocalServiceUtil.hasUserRoles(
userID,
// TODO: this only works when there is one company
CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
new String[] {role},
true
);
m_logger.info("RoleLocalServiceUtil.hasUserRoles:"+Boolean.toString(blnFound));
} catch (Exception e) {
...
}
}
UserGroupRoleLocalServiceUtil.getUserGroupRoles
не находит никаких ролей