基于 Java 实现的将已有 RBAC(基于角色的访问控制)权限管理系统改造为层级权限管理系统的示例。我们假设已经有一个简单的 RBAC 系统,现在要在此基础上

4 阅读2分钟

基于 Java 实现的将已有 RBAC(基于角色的访问控制)权限管理系统改造为层级权限管理系统的示例。我们假设已经有一个简单的 RBAC 系统,现在要在此基础上添加层级关系

1. 原 RBAC 系统设计

首先回顾一下简单的 RBAC 系统的基本组件:用户(User)、角色(Role)和权限(Permission)。

实体类定义

import java.util.ArrayList;
import java.util.List;

// 权限类
class Permission {
    private String name;

    public Permission(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// 角色类
class Role {
    private String name;
    private List<Permission> permissions;

    public Role(String name) {
        this.name = name;
        this.permissions = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<Permission> getPermissions() {
        return permissions;
    }

    public void addPermission(Permission permission) {
        permissions.add(permission);
    }
}

// 用户类
class User {
    private String name;
    private List<Role> roles;

    public User(String name) {
        this.name = name;
        this.roles = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<Role> getRoles() {
        return roles;
    }

    public void addRole(Role role) {
        roles.add(role);
    }

    public boolean hasPermission(Permission permission) {
        for (Role role : roles) {
            if (role.getPermissions().contains(permission)) {
                return true;
            }
        }
        return false;
    }
}

2. 改造为层级权限管理系统

为了实现层级权限管理,我们需要引入角色的层级关系,即父角色和子角色。子角色可以继承父角色的权限,并且可以有自己额外的权限。

改造后的角色类

import java.util.ArrayList;
import java.util.List;

class HierarchicalRole {
    private String name;
    private List<Permission> permissions;
    private HierarchicalRole parent;
    private List<HierarchicalRole> children;

    public HierarchicalRole(String name) {
        this.name = name;
        this.permissions = new ArrayList<>();
        this.children = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<Permission> getPermissions() {
        List<Permission> allPermissions = new ArrayList<>(permissions);
        if (parent != null) {
            allPermissions.addAll(parent.getPermissions());
        }
        return allPermissions;
    }

    public void addPermission(Permission permission) {
        permissions.add(permission);
    }

    public HierarchicalRole getParent() {
        return parent;
    }

    public void setParent(HierarchicalRole parent) {
        this.parent = parent;
        parent.children.add(this);
    }

    public List<HierarchicalRole> getChildren() {
        return children;
    }
}

改造后的用户类

import java.util.ArrayList;
import java.util.List;

class HierarchicalUser {
    private String name;
    private List<HierarchicalRole> roles;

    public HierarchicalUser(String name) {
        this.name = name;
        this.roles = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<HierarchicalRole> getRoles() {
        return roles;
    }

    public void addRole(HierarchicalRole role) {
        roles.add(role);
    }

    public boolean hasPermission(Permission permission) {
        for (HierarchicalRole role : roles) {
            if (role.getPermissions().contains(permission)) {
                return true;
            }
        }
        return false;
    }
}

3. 使用示例

public class HierarchicalRBACExample {
    public static void main(String[] args) {
        // 创建权限
        Permission readPermission = new Permission("read");
        Permission writePermission = new Permission("write");
        Permission deletePermission = new Permission("delete");

        // 创建角色
        HierarchicalRole adminRole = new HierarchicalRole("Admin");
        adminRole.addPermission(readPermission);
        adminRole.addPermission(writePermission);
        adminRole.addPermission(deletePermission);

        HierarchicalRole userRole = new HierarchicalRole("User");
        userRole.setParent(adminRole);
        userRole.addPermission(readPermission);

        // 创建用户
        HierarchicalUser user = new HierarchicalUser("John");
        user.addRole(userRole);

        // 检查权限
        System.out.println("User has read permission: " + user.hasPermission(readPermission));
        System.out.println("User has write permission: " + user.hasPermission(writePermission));
        System.out.println("User has delete permission: " + user.hasPermission(deletePermission));
    }
}

代码解释

HierarchicalRole 类:

  • 增加了 parent 字段来表示父角色,children 字段来表示子角色列表。

  • getPermissions 方法会递归获取父角色的权限,从而实现权限的继承。 HierarchicalUser 类:

  • 角色列表使用 HierarchicalRole 类型。

  • hasPermission 方法会检查用户所拥有的角色及其继承的权限是否包含指定的权限。

使用示例:

  • 创建了不同的权限和角色,设置了角色的层级关系。
  • 创建用户并分配角色,最后检查用户的权限。
  • 通过这种方式,我们将原有的 RBAC 系统改造为了层级权限管理系统,实现了角色之间的权限继承。