RBAC(Role-Based Access Control,基于角色的访问控制)是一种常用的访问控制机制,用于管理系统中的用户权限。RBAC通过将用户分配给角色,并将权限授予角色,从而控制用户对资源的访问。
基于RBAC实现的权限管理通常需要涉及以下几张表:
1. 用户表(user):记录系统中的所有用户,包括用户ID、用户名、密码等信息。
2. 角色表(role):记录系统中的所有角色,包括角色ID、角色名等信息。
3. 用户角色关联表(user_role):记录用户和角色之间的关联关系,包括用户ID、角色ID等信息
4. 权限表(permission):记录系统中的所有权限,包括权限ID、权限名、权限类型等信息。
5. 角色权限关联表(role_permission):记录角色和权限之间的关联关系,包括角色ID、权限ID等信息。
-- 创建角色表
CREATE TABLE roles (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
description VARCHAR(255), PRIMARY KEY (id)
);
-- 创建资源表
CREATE TABLE resources (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description VARCHAR(255)
);
-- 创建用户表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
-- 创建权限表
CREATE TABLE permissions (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description VARCHAR(255),
resource_id INT NOT NULL,
FOREIGN KEY (resource_id) REFERENCES resources(id)
);
-- 创建角色-权限关联表
CREATE TABLE role_permissions (
role_id INT,
permission_id INT,
FOREIGN KEY (role_id) REFERENCES roles(id),
FOREIGN KEY (permission_id) REFERENCES permissions(id),
PRIMARY KEY (role_id, permission_id)
);
-- 创建用户-角色关联表
CREATE TABLE user_roles (
user_id INT,
role_id INT,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (role_id) REFERENCES roles(id),
PRIMARY KEY (user_id, role_id)
);
-- 插入角色数据
INSERT INTO roles (id, name, description) VALUES
(1, '管理员', '拥有系统管理的所有权限'),
(2, '编辑员', '拥有编辑内容的权限'),
(3, '访客', '只具备浏览内容的权限');
-- 插入资源数据
INSERT INTO resources (id, name, description) VALUES
(1, '文章', '存储网站的文章内容');
-- 插入权限数据
INSERT INTO permissions (id, name, description, resource_id) VALUES
(1, '创建文章', '允许创建新文章', 1),
(2, '编辑文章', '允许编辑已存在的文章', 1),
(3, '删除文章', '允许删除文章', 1);
-- 插入用户数据
INSERT INTO users (id, name) VALUES
(1, '张一'),
(2, '张二'),
(3, '张三');
-- 插入角色-权限关联数据
INSERT INTO role_permissions (role_id, permission_id) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 2),
(3, 1);
-- 插入用户-角色关联数据
INSERT INTO user_roles (user_id, role_id) VALUES
(1, 1),
(2, 2),
(3, 3);