管理员角色能否在 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
}