具有 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 实例的角色权限的主要内容,如果未能解决你的问题,请参考以下文章