具有 keycloak 实例的角色权限

Posted

技术标签:

【中文标题】具有 keycloak 实例的角色权限【英文标题】:Role permissions with keycloak instance 【发布时间】:2021-11-12 07:24:46 【问题描述】:

我有一个 keycloak 实例,我将其用于角色的 CRUD 操作。有没有办法获得角色权限?我试图搜索有关它的所有内容,但我找不到如何获得分配给角色的权限...

这是我的代码示例:

@RestController
@RequestMapping("/roles")
public class RolesController 

    // must use "master" realm and "admin-cli" to connect to the instance
    // although other realms and clients can be modified

    private Keycloak keycloak = KeycloakBuilder.builder()
            .serverUrl("http://localhost:8437/auth")
            .realm("master")
            .clientId("admin-cli")
            .username("admin")
            .password("admin")
            .build();

    @GetMapping
    public ResponseEntity<List<RoleRepresentation>> getRoles() throws IOException 
        return new ResponseEntity<>(keycloak.realm("dashing-data").roles().list(), HttpStatus.OK);
    

    @PostMapping
    public ResponseEntity<RoleRepresentation> createRole(@RequestBody RoleRepresentation role) throws IOException 

        List<RoleRepresentation> roleList = keycloak.realm("dashing-data").roles().list();
        boolean roleAlreadyExist = roleList.stream().anyMatch(r -> r.getName().contains(role.getName()));
        RoleRepresentation newRole = new RoleRepresentation();

        if (!roleAlreadyExist)
            newRole.setName(role.getName());
            newRole.setDescription(role.getDescription());
            keycloak.realm("dashing-data").roles().create(newRole);
        

        return new ResponseEntity<>(newRole, HttpStatus.OK);
    

    @DeleteMapping("/id")
    public ResponseEntity<String> deleteRole(@PathVariable String id)

        RoleByIdResource role = keycloak.realm("dashing-data").rolesById();

        if (role == null)
            return new ResponseEntity<>("Could not find the role!", HttpStatus.NOT_FOUND);
        

        return new ResponseEntity<>("Role successfully deleted!", HttpStatus.OK);
    
    


【问题讨论】:

权限是什么意思? 【参考方案1】:

我认为您在不需要的地方增加了复杂性。一个 keycloak 角色应该足以满足您的需求。如果您有一个只有管理员才能执行的 CRUD 操作(如 DELETE),您只需在 keycloak 中创建一个名为“manager”的角色并将其分配给您想要的用户。在您的后端应用程序中,您只需要将角色名称与所需角色进行比较。另一方面,对于读取操作,您可以匹配用户是否具有经理或从 keycloak 读取角色。

【讨论】:

以上是关于具有 keycloak 实例的角色权限的主要内容,如果未能解决你的问题,请参考以下文章

如何查看oracle用户具有的权限和角色

如何查看oracle用户具有的权限和角色?

goRBAC —— Go 语言基于角色的权限控制框架

角色用户权限的关系

PHP.46-TP框架商城应用实例-后台21-权限管理-权限和角色的关系

默认角色CONNECT 和RESOURCE角色具有哪些权限