138 lines
4.3 KiB
Markdown
138 lines
4.3 KiB
Markdown
|
设计一个用户和权限管理系统是一个相对复杂的任务,尤其是涉及到后台管理系统和门户两个不同应用的情况。以下是一个简单的设计思路,你可以根据具体需求进行调整和扩展。
|
|||
|
|
|||
|
## 1. 用户管理
|
|||
|
|
|||
|
### 1.1 用户信息
|
|||
|
|
|||
|
在数据库中创建一个用户表,包含如下字段:
|
|||
|
|
|||
|
- **ID**: 唯一标识符
|
|||
|
- **用户名**
|
|||
|
- **密码(加密存储)**
|
|||
|
- **姓名**
|
|||
|
- **邮箱**
|
|||
|
- **电话号码**
|
|||
|
- **创建时间**
|
|||
|
- **最后登录时间**
|
|||
|
- **状态(启用/禁用)**
|
|||
|
|
|||
|
### 1.2 用户角色
|
|||
|
|
|||
|
创建一个角色表,以及用户角色关联表,这样可以实现一个用户拥有多个角色的情况。
|
|||
|
|
|||
|
- **角色表**
|
|||
|
- **ID**
|
|||
|
- **角色名称**
|
|||
|
- **描述**
|
|||
|
- **用户角色关联表**
|
|||
|
- **用户ID**
|
|||
|
- **角色ID**
|
|||
|
|
|||
|
## 2. 权限管理
|
|||
|
|
|||
|
### 2.1 权限资源
|
|||
|
|
|||
|
在数据库中创建一个权限资源表,用于存储系统中的各种资源,如菜单、页面、功能等。
|
|||
|
|
|||
|
- **ID**
|
|||
|
- **资源名称**
|
|||
|
- **资源类型(菜单、页面、按钮等)**
|
|||
|
- **资源路径**
|
|||
|
- **父资源ID(用于构建资源树)**
|
|||
|
- **排序字段**
|
|||
|
- **是否需要权限控制**
|
|||
|
|
|||
|
### 2.2 角色权限
|
|||
|
|
|||
|
创建一个角色权限关联表,记录角色拥有的权限。
|
|||
|
|
|||
|
- **角色ID**
|
|||
|
- **权限ID**
|
|||
|
|
|||
|
## 3. 后台管理系统和门户系统适配
|
|||
|
|
|||
|
### 3.1 权限隔离
|
|||
|
|
|||
|
在设计时要确保后台管理系统和门户系统有自己的权限资源,不同的角色在这两个系统中可以有不同的权限。
|
|||
|
|
|||
|
### 3.2 公用用户表
|
|||
|
|
|||
|
两个系统可以共用同一个用户表,但需要注意一些特定字段和信息,如用户登录后所看到的默认页面、角色、权限等,在两个系统中可能会有不同的配置。
|
|||
|
|
|||
|
## 4. 登录和身份验证
|
|||
|
|
|||
|
### 4.1 单点登录(可选)
|
|||
|
|
|||
|
如果后台管理系统和门户系统是不同的应用,你可以考虑使用单点登录(SSO)机制,以确保用户在一个系统登录后,在另一个系统中无需重新登录。
|
|||
|
|
|||
|
### 4.2 Token 验证
|
|||
|
|
|||
|
使用 Token 或其他类似的身份验证机制,确保系统的安全性。
|
|||
|
|
|||
|
## 5. 前后端交互
|
|||
|
|
|||
|
### 5.1 API 接口设计
|
|||
|
|
|||
|
设计清晰的 API 接口,包括用户注册、登录、角色授权、权限获取等功能。
|
|||
|
|
|||
|
### 5.2 安全性
|
|||
|
|
|||
|
在前后端交互中确保数据传输的安全性,使用 HTTPS 协议等手段进行保护。
|
|||
|
|
|||
|
## 6. 日志记录
|
|||
|
|
|||
|
为系统操作和权限变更等关键操作设计日志记录机制,以便追踪系统使用和排查问题。
|
|||
|
|
|||
|
这只是一个基本的设计思路,实际情况可能更为复杂,具体的实现会依赖于你的项目需求和技术栈。在具体实施之前,建议先对系统需求和用例进行深入分析。
|
|||
|
|
|||
|
## 7. 数据表DDL
|
|||
|
|
|||
|
```sql
|
|||
|
-- 用户信息表
|
|||
|
CREATE TABLE users (
|
|||
|
user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识符',
|
|||
|
username VARCHAR(255) NOT NULL COMMENT '用户名',
|
|||
|
password VARCHAR(255) NOT NULL COMMENT '密码',
|
|||
|
name VARCHAR(255) NOT NULL COMMENT '姓名',
|
|||
|
email VARCHAR(255) NOT NULL COMMENT '邮箱',
|
|||
|
phone_number VARCHAR(20) COMMENT '电话号码',
|
|||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|||
|
last_login_at TIMESTAMP COMMENT '最后登录时间',
|
|||
|
status ENUM('ENABLED', 'DISABLED') DEFAULT 'ENABLED' COMMENT '用户状态(启用/禁用)'
|
|||
|
);
|
|||
|
|
|||
|
-- 角色表
|
|||
|
CREATE TABLE roles (
|
|||
|
role_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '角色唯一标识符',
|
|||
|
role_name VARCHAR(255) NOT NULL COMMENT '角色名称',
|
|||
|
description TEXT COMMENT '角色描述'
|
|||
|
);
|
|||
|
|
|||
|
-- 用户角色关联表
|
|||
|
CREATE TABLE user_roles (
|
|||
|
user_id INT,
|
|||
|
role_id INT,
|
|||
|
PRIMARY KEY (user_id, role_id) COMMENT '联合主键'
|
|||
|
);
|
|||
|
|
|||
|
-- 权限资源表
|
|||
|
CREATE TABLE permissions (
|
|||
|
permission_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '权限唯一标识符',
|
|||
|
resource_name VARCHAR(255) NOT NULL COMMENT '资源名称',
|
|||
|
resource_type ENUM('MENU', 'PAGE', 'BUTTON') NOT NULL COMMENT '资源类型',
|
|||
|
resource_path VARCHAR(255) COMMENT '资源路径',
|
|||
|
parent_resource_id INT COMMENT '父资源ID',
|
|||
|
sort_order INT COMMENT '排序字段',
|
|||
|
requires_permission BOOLEAN DEFAULT TRUE COMMENT '是否需要权限控制'
|
|||
|
);
|
|||
|
|
|||
|
-- 角色权限关联表
|
|||
|
CREATE TABLE role_permissions (
|
|||
|
role_id INT,
|
|||
|
permission_id INT,
|
|||
|
PRIMARY KEY (role_id, permission_id) COMMENT '联合主键'
|
|||
|
);
|
|||
|
|
|||
|
```
|
|||
|
|