Skip to main content

rbac

· 2 min read

slug: rbac title: rbac authors: [shanks] tags: [rbac]

RBAC 是一种基于角色的访问控制模型,通过将用户与角色关联,角色与权限关联,来实现对资源的灵活权限管理。

表结构设计

用户表(users)

  • 存储用户基本信息。

  • 每个用户关联多个角色。

    users (
    id INT PRIMARY KEY,
    username VARCHAR(255), -- 用户表
    password VARCHAR(255) -- 密码
    )

角色表(roles)

  • 定义系统中可用的角色。

  • 每个角色可以关联多个权限。

    roles (
    id INT PRIMARY KEY,
    name VARCHAR(255), -- 角色名称
    description VARCHAR(255) -- 角色描述
    )

权限表(permissions)

  • 定义系统中的所有权限项。

  • 权限类型可以是菜单、接口、按钮等。

    permissions (
    id INT PRIMARY KEY,
    name VARCHAR(255), -- 权限名称
    type ENUM('menu', 'api', 'button'), -- 权限类型
    resource VARCHAR(255), -- 资源路径(如接口路径、菜单标识等)
    parent_id INT, -- 父级权限(用于菜单的层级关系)
    description VARCHAR(255) -- 权限描述
    )

用户角色表(user_roles)

  • 建立用户与角色之间的多对多关系。

    user_roles (
    user_id INT, -- 用户ID
    role_id INT, -- 角色ID
    PRIMARY KEY (user_id, role_id)
    )

角色权限表(role_permissions)

  • 建立角色与权限之间的多对多关系。

    role_permissions (
    role_id INT, -- 角色ID
    permission_id INT, -- 权限ID
    PRIMARY KEY (role_id, permission_id)
    )

前端实现

基于 casl 实现即可

https://casl.js.org/v6/en/package/casl-react

后端实现

也是基于 casl 实现

https://casl.js.org/v6/en/guide/intro