67,549
社区成员




请教一下:按照你这个实际的逻辑,怎样在选择角色窗口后再次调用执行realm的doGetAuthorizationInfo的方法来赋予角色权限
Long targetRoleId = Long.parseLong(map.get("roleId"));// 选的
subject.getSession().setAttribute("targetRoleId", targetRoleId);//放入Session
MyShiroRealm 的 doGetAuthorizationInfo()
Subject subject = SecurityUtils.getSubject();
Object targetRoleId = subject.getSession().getAttribute("targetRoleId");
// CbStaff cbStaff = (CbStaff) principals.getPrimaryPrincipal();
CbRole cbRole = null;
if (targetRoleId != null)// 指定角色
{
cbRole = roleRepo.getOne(Long.parseLong(targetRoleId.toString()));
authorizationInfo.addRole(cbRole.getRoleCode());
Set<CbRoleResource> resSet = cbRole.getCbRoleResources();
Iterator<CbRoleResource> resIt = resSet.iterator();
while (resIt.hasNext())
{
CbResource res = resIt.next().getCbResource();
if (res.getResourceType() > 1 && StringUtils.isNotEmpty(res.getPermission()))// 子菜单
authorizationInfo.addStringPermission(res.getPermission());
}
}
else// 默认角色
{
cbRole = roleRepo.findByRoleCode("default");
authorizationInfo.addRole("default");
}
这样,甚至可以实现应用内切换角色,各处的权限验证也是符合所选角色的,我试过了。