智剧通(ZJT)文档中心 权限系统设计
本文档抓取自官方文档中心(2026-10-10 快照),具体功能以实际产品为准。

权限系统设计方案

概述

基于现有系统的用户模型和权限代码清单,设计一个分阶段的权限系统,支持初版和加强版两种模式。

初版权限系统(用户-权限组-权限模型)

核心概念

数据模型

1. 权限表(permissions)

CREATE TABLE permissions (
    id INT PRIMARY KEY AUTO_INCREMENT,
    permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限代码,如 video_workflow:view',
    permission_name VARCHAR(200) NOT NULL COMMENT '权限名称,如 视频工作流查看',
    module VARCHAR(50) NOT NULL COMMENT '所属模块,如 video_workflow',
    description TEXT COMMENT '权限描述',
    status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_module (module),
    INDEX idx_status (status)
);

2. 权限组表(permission_groups)

CREATE TABLE permission_groups (
    id INT PRIMARY KEY AUTO_INCREMENT,
    group_name VARCHAR(100) NOT NULL COMMENT '权限组名称',
    group_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限组代码',
    description TEXT COMMENT '权限组描述',
    status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_group_code (group_code),
    INDEX idx_status (status)
);

3. 权限组-权限关联表(permission_group_permissions)

CREATE TABLE permission_group_permissions (
    id INT PRIMARY KEY AUTO_INCREMENT,
    group_id INT NOT NULL COMMENT '权限组ID',
    permission_id INT NOT NULL COMMENT '权限ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_group_permission (group_id, permission_id),
    FOREIGN KEY (group_id) REFERENCES permission_groups(id) ON DELETE CASCADE,
    FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE
);

4. 用户-权限组关联表(user_permission_groups)

CREATE TABLE user_permission_groups (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL COMMENT '用户ID',
    group_id INT NOT NULL COMMENT '权限组ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_user_group (user_id, group_id),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (group_id) REFERENCES permission_groups(id) ON DELETE CASCADE
);

核心功能

权限验证流程

  1. 用户登录后获取用户信息
  2. 查询用户所属的所有权限组
  3. 获取权限组对应的所有权限代码
  4. 将权限代码列表缓存到用户会话中
  5. API请求时通过中间件验证权限

权限验证中间件

class PermissionMiddleware:
    def __init__(self, required_permission):
        self.required_permission = required_permission

    def __call__(self, func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 获取当前用户
            user = get_current_user()
            if not user:
                return jsonify({"error": "用户未登录"}), 401

            # 检查用户权限
            if not self.has_permission(user.id, self.required_permission):
                return jsonify({"error": "权限不足"}), 403

            return func(*args, **kwargs)
        return wrapper

    def has_permission(self, user_id, permission):
        # 查询用户权限
        user_permissions = self.get_user_permissions(user_id)
        return permission in user_permissions

    def get_user_permissions(self, user_id):
        # 从缓存或数据库获取用户权限列表
        # 优先从Redis缓存获取
        cache_key = f"user_permissions:{user_id}"
        permissions = redis_client.get(cache_key)

        if not permissions:
            # 从数据库查询
            permissions = self.query_user_permissions(user_id)
            # 缓存1小时
            redis_client.setex(cache_key, 3600, json.dumps(permissions))
        else:
            permissions = json.loads(permissions)

        return permissions

API接口设计

# 权限管理API
@app.route('/api/permissions', methods=['GET'])
@admin_required
def list_permissions():
    """获取权限列表"""
    pass

@app.route('/api/permission-groups', methods=['GET'])
@login_required
def list_permission_groups():
    """获取权限组列表"""
    pass

@app.route('/api/permission-groups', methods=['POST'])
@admin_required
def create_permission_group():
    """创建权限组"""
    pass

@app.route('/api/users/<int:user_id>/permission-groups', methods=['GET'])
@admin_required
def get_user_permission_groups(user_id):
    """获取用户的权限组"""
    pass

@app.route('/api/users/<int:user_id>/permission-groups', methods=['PUT'])
@admin_required
def update_user_permission_groups(user_id):
    """更新用户的权限组"""
    pass

加强版权限系统(增加用户组概念)

新增概念

新增数据模型

1. 用户组表(user_groups)

CREATE TABLE user_groups (
    id INT PRIMARY KEY AUTO_INCREMENT,
    group_name VARCHAR(100) NOT NULL COMMENT '用户组名称',
    group_code VARCHAR(100) NOT NULL UNIQUE COMMENT '用户组代码',
    description TEXT COMMENT '用户组描述',
    parent_id INT DEFAULT NULL COMMENT '父用户组ID,支持层级结构',
    status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_group_code (group_code),
    INDEX idx_parent_id (parent_id),
    INDEX idx_status (status),
    FOREIGN KEY (parent_id) REFERENCES user_groups(id) ON DELETE SET NULL
);

2. 用户-用户组关联表(user_group_members)

CREATE TABLE user_group_members (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL COMMENT '用户ID',
    group_id INT NOT NULL COMMENT '用户组ID',
    role_in_group VARCHAR(50) COMMENT '用户在组内的角色,如 member, admin',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_user_group (user_id, group_id),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE
);

3. 用户组-权限组关联表(user_group_permission_groups)

CREATE TABLE user_group_permission_groups (
    id INT PRIMARY KEY AUTO_INCREMENT,
    group_id INT NOT NULL COMMENT '用户组ID',
    permission_group_id INT NOT NULL COMMENT '权限组ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_group_permission_group (group_id, permission_group_id),
    FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE,
    FOREIGN KEY (permission_group_id) REFERENCES permission_groups(id) ON DELETE CASCADE
);

权限验证逻辑升级

权限获取流程(加强版)

  1. 获取用户直接绑定的权限组权限
  2. 获取用户所属用户组的权限组权限
  3. 合并所有权限(去重)
  4. 按优先级处理权限冲突

权限优先级规则

升级后的权限验证

def get_user_effective_permissions(user_id):
    """获取用户的有效权限列表"""
    permissions = set()

    # 1. 获取用户直接绑定的权限组权限
    direct_permissions = get_user_direct_permissions(user_id)
    permissions.update(direct_permissions)

    # 2. 获取用户所属用户组的权限
    user_group_permissions = get_user_group_permissions(user_id)
    permissions.update(user_group_permissions)

    # 3. 应用权限规则(黑名单、优先级等)
    final_permissions = apply_permission_rules(user_id, permissions)

    return final_permissions

def get_user_group_permissions(user_id):
    """获取用户所属用户组的权限"""
    permissions = set()

    # 查询用户所属的用户组
    user_groups = get_user_groups(user_id)

    for group in user_groups:
        # 获取用户组的权限组
        group_permission_groups = get_group_permission_groups(group.id)

        for pg in group_permission_groups:
            # 获取权限组的权限
            pg_permissions = get_permission_group_permissions(pg.id)
            permissions.update(pg_permissions)

    return permissions

加强版API接口

用户组管理API

@app.route('/api/user-groups', methods=['GET'])
@admin_required
def list_user_groups():
    """获取用户组列表"""
    pass

@app.route('/api/user-groups', methods=['POST'])
@admin_required
def create_user_group():
    """创建用户组"""
    pass

@app.route('/api/user-groups/<int:group_id>', methods=['PUT'])
@admin_required
def update_user_group(group_id):
    """更新用户组"""
    pass

@app.route('/api/user-groups/<int:group_id>/members', methods=['GET'])
@admin_required
def get_user_group_members(group_id):
    """获取用户组成员"""
    pass

@app.route('/api/user-groups/<int:group_id>/members', methods=['POST'])
@admin_required
def add_user_group_member(group_id):
    """添加用户组成员"""
    pass

@app.route('/api/user-groups/<int:group_id>/permission-groups', methods=['GET'])
@admin_required
def get_user_group_permission_groups(group_id):
    """获取用户组的权限组"""
    pass

@app.route('/api/user-groups/<int:group_id>/permission-groups', methods=['PUT'])
@admin_required
def update_user_group_permission_groups(group_id):
    """更新用户组的权限组"""
    pass

实施计划

第一阶段:初版实现(2-3周)

  1. 创建权限相关数据库表
  2. 实现权限管理模型类
  3. 开发权限验证中间件
  4. 实现基础API接口
  5. 集成到现有系统

第二阶段:加强版升级(2-3周)

  1. 创建用户组相关表
  2. 升级权限验证逻辑
  3. 开发用户组管理功能
  4. 更新API接口
  5. 测试和优化

第三阶段:权限管理界面(2周)

  1. 开发权限管理后台界面
  2. 实现权限分配可视化
  3. 添加权限审计功能
  4. 用户友好的权限配置

技术要点

性能优化

安全性考虑

扩展性设计

与现有系统集成

用户模型兼容性

权限代码复用

API兼容性