管理员角色能否在 Spring-security ACL Grails 中获得其他用户权限
Can admin role get other users permissions in Spring-security ACL Grails
我正在尝试制作一个概念验证应用程序,允许具有管理权限的用户授予和撤销其他用户的权限。虽然授予和撤销仅适用于用户名(唯一标识符),但我无法获得在 UI 中显示的权限。是否可以从服务方法中获取其他用户的权限列表?
我尝试在网上搜索,但找不到任何适用于我的问题的解决方案。我尝试过使用 SwitchUserAuthorityChanger、RunAsManager 和 aclService.readAclsById。 None 的工作人员。
我正在使用带有 Spring-Security 3.2.0 和 ACL 3.2.0 的 Grails 3.3.2。
大家好!
最后我自己解决了这个问题。我会 post 在这里回答,以防某些可怜的人 运行 遇到类似的问题。
在 ACL 数据库表中挖掘了一下之后,我创建了一个单独的服务,在其中我通过其 ID 获得 AclObjectIdentity
,我获得了用户 sid。使用这些变量,我从 AclEntry
中找到所有相关变量。之后,只需通过他们的掩码获得权限即可。
以下是可能对任何人都有帮助的方法:
def getPermissions(Object domainObject, String sid) {
Map<String, String> returnValue = [
"status": "success"
]
def aclObject = AclObjectIdentity.findByObjectId(domainObject.id)
def userAclSid = AclSid.findBySid(sid)
if (null == userAclSid || null == aclObject) {
returnValue["status"] = "failed"
return returnValue
}
def aclEntries = AclEntry.findAllBySidAndAclObjectIdentity(userAclSid, aclObject)
returnValue["permissions"] = []
def tempMap = [:]
if (null == aclEntries) {
returnValue["permissions"] = "null"
return returnValue
}
def counter = 0
for (entry in aclEntries) {
int mask = entry.mask
BasePermission permission
for (BasePermission perm in PermissionEnum.toList()) {
int test = 1 << mask
if (perm.getMask() == test) {
permission = perm
break;
}
}
def permString = PermissionEnum.getPermission(permission)
tempMap["$counter"] = permString
counter++
}
returnValue["permissions"] = tempMap
return returnValue
}
我正在尝试制作一个概念验证应用程序,允许具有管理权限的用户授予和撤销其他用户的权限。虽然授予和撤销仅适用于用户名(唯一标识符),但我无法获得在 UI 中显示的权限。是否可以从服务方法中获取其他用户的权限列表?
我尝试在网上搜索,但找不到任何适用于我的问题的解决方案。我尝试过使用 SwitchUserAuthorityChanger、RunAsManager 和 aclService.readAclsById。 None 的工作人员。
我正在使用带有 Spring-Security 3.2.0 和 ACL 3.2.0 的 Grails 3.3.2。
大家好!
最后我自己解决了这个问题。我会 post 在这里回答,以防某些可怜的人 运行 遇到类似的问题。
在 ACL 数据库表中挖掘了一下之后,我创建了一个单独的服务,在其中我通过其 ID 获得 AclObjectIdentity
,我获得了用户 sid。使用这些变量,我从 AclEntry
中找到所有相关变量。之后,只需通过他们的掩码获得权限即可。
以下是可能对任何人都有帮助的方法:
def getPermissions(Object domainObject, String sid) {
Map<String, String> returnValue = [
"status": "success"
]
def aclObject = AclObjectIdentity.findByObjectId(domainObject.id)
def userAclSid = AclSid.findBySid(sid)
if (null == userAclSid || null == aclObject) {
returnValue["status"] = "failed"
return returnValue
}
def aclEntries = AclEntry.findAllBySidAndAclObjectIdentity(userAclSid, aclObject)
returnValue["permissions"] = []
def tempMap = [:]
if (null == aclEntries) {
returnValue["permissions"] = "null"
return returnValue
}
def counter = 0
for (entry in aclEntries) {
int mask = entry.mask
BasePermission permission
for (BasePermission perm in PermissionEnum.toList()) {
int test = 1 << mask
if (perm.getMask() == test) {
permission = perm
break;
}
}
def permString = PermissionEnum.getPermission(permission)
tempMap["$counter"] = permString
counter++
}
returnValue["permissions"] = tempMap
return returnValue
}