learning_record_doc/微服务/ds-cloud/用户权限/用户权限设计.md
2023-12-03 23:40:07 +08:00

4.3 KiB
Raw Blame History

设计一个用户和权限管理系统是一个相对复杂的任务,尤其是涉及到后台管理系统和门户两个不同应用的情况。以下是一个简单的设计思路,你可以根据具体需求进行调整和扩展。

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

-- 用户信息表
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 '联合主键'
);