grails - 管理员角色能否在Spring-security ACL Grails中获得其他用户的权限

标签 grails spring-security permissions acl

我正在尝试制作一个概念验证应用程序,该应用程序允许具有管理权限的用户授予和撤消其他用户的权限。虽然仅使用用户名(唯一标识符)进行授予和吊销,但获得在UI中显示的权限被证明是我无法实现的。是否可以从服务方法中获取其他用户的权限列表?

我曾尝试在网上搜索,但找不到适用于我的问题的任何解决方案。我尝试使用SwitchUserAuthorityChanger,RunAsManager和aclService.readAclsById。这些都不起作用。

我将Grails 3.3.2与Spring-Security 3.2.0和ACL 3.2.0一起使用。

欢呼大家!

最佳答案

我最终自己解决了这个问题。我将在这里发布答案,以防某些可怜的灵魂遇到类似的问题。

在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
}

关于grails - 管理员角色能否在Spring-security ACL Grails中获得其他用户的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48466383/

相关文章:

java - 如何使用 Spring security 从 Spring Data JPA 加载经过身份验证的用户实体模型以在其他 JPA 存储库中使用?

Tomcat 访问 NFS - 无法读取新文件

validation - Grail 的错误属性从何而来?

grails 1.3.7 + 2.0,第 5.2.1.1 节,多对一和一对一

grails - Grails-集成测试中带有参数的redirect()

java - 无法运行程序 "/Applications/Utilities/Terminal.app": error=13, 权限被拒绝

Android权限和ProtectionLevel

grails - Grails 中按关联计数排序

java - 为什么Spring Security不提供密码的字符数组参数

Spring Security/MVC/JPA --> 不支持请求方法 'POST'