cool-admin(midway版)数据权限架构:权限模型设计与实现终极指南

cool-admin(midway版)数据权限架构:权限模型设计与实现终极指南

【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、typescript、typeorm、mysql、jwt、vue3、vite、element-ui等构建 【免费下载链接】cool-admin-midway 项目地址: https://gitcode.com/gh_mirrors/co/cool-admin-midway

cool-admin(midway版)作为一款基于Midway.js 3.x构建的现代化后台权限管理框架,其数据权限架构设计巧妙且功能强大。本文将深入解析cool-admin的权限模型设计与实现,帮助开发者理解如何构建安全可靠的企业级权限管理系统。😊

🔐 权限模型核心设计理念

cool-admin采用经典的RBAC(基于角色的访问控制)模型,并在此基础上进行了创新性扩展,形成了四级权限控制体系

  1. 用户-角色关联:用户通过角色获得权限
  2. 角色-菜单关联:角色拥有菜单访问权限
  3. 角色-部门关联:角色拥有数据范围权限
  4. 权限标识校验:细粒度接口权限控制

📊 核心实体关系图

用户(User) ──多对多── 角色(Role) ──多对多── 菜单(Menu)
                       │
                       └──多对多── 部门(Department)

🏗️ 数据权限架构实现详解

1. 角色实体设计

src/modules/base/entity/sys/role.ts 中,角色实体定义了权限控制的核心字段:

@Entity('base_sys_role')
export class BaseSysRoleEntity extends BaseEntity {
  @Column({ comment: '数据权限是否关联上下级', default: false })
  relevance: boolean; // 数据权限控制关键字段
  
  @Column({ comment: '菜单权限', type: 'json', transformer: transformerJson })
  menuIdList: number[]; // 菜单权限列表
  
  @Column({ comment: '部门权限', type: 'json', transformer: transformerJson })
  departmentIdList: number[]; // 数据范围权限列表
}

2. 权限校验中间件

src/modules/base/middleware/authority.ts 实现了完整的权限校验逻辑:

  • Token验证:JWT令牌解析与校验
  • 权限缓存:用户权限信息缓存机制
  • URL匹配:动态权限标识匹配
  • 超管特权:admin用户拥有所有权限

3. 数据范围权限控制

cool-admin通过部门权限实现数据隔离,在 src/modules/base/service/sys/department.ts 中:

async getByRoleIds(roleIds: number[], isAdmin) {
  if (!_.isEmpty(roleIds)) {
    if (isAdmin) {
      // 超管拥有所有部门权限
      const result = await this.baseSysDepartmentEntity.find();
      return result.map(e => e.id);
    }
    // 普通角色根据角色-部门关联表获取权限
    const result = await this.baseSysRoleDepartmentEntity
      .createQueryBuilder('a')
      .where('a.roleId in (:...roleIds)', { roleIds })
      .getMany();
    return _.uniq(result.map(e => e.departmentId));
  }
  return [];
}

🚀 权限模型的核心特性

1. 动态权限刷新机制

当角色权限变更时,系统会自动刷新所有相关用户的权限缓存:

// src/modules/base/service/sys/perms.ts
async refreshPerms(userId) {
  await this.midwayCache.del(`admin:token:${userId}`);
  const roleIds = await this.baseSysRoleService.getByUser(userId);
  const perms = await this.baseSysMenuService.getPerms(roleIds);
  await this.midwayCache.set(`admin:perms:${userId}`, perms);
  
  // 更新部门权限
  const departments = await this.baseSysDepartmentService.getByRoleIds(
    roleIds,
    await this.isAdmin(roleIds)
  );
  await this.midwayCache.set(`admin:department:${userId}`, departments);
}

2. 菜单权限粒度控制

系统支持菜单级权限控制,每个菜单可以定义多个权限标识:

// src/modules/base/service/sys/menu.ts
async getPerms(roleIds) {
  let perms = [];
  if (!_.isEmpty(roleIds)) {
    const find = await this.baseSysMenuEntity.createQueryBuilder('a');
    if (!roleIds.includes(1)) { // 非超管角色需要权限过滤
      find.innerJoinAndSelect(
        BaseSysRoleMenuEntity,
        'b',
        'a.id = b.menuId AND b.roleId in (:...roleIds)',
        { roleIds }
      );
    }
    find.where('a.perms is not NULL');
    const result = await find.getMany();
    // 提取权限标识并去重
    result.forEach(d => {
      if (d.perms) {
        perms = perms.concat(d.perms.split(','));
      }
    });
  }
  return _.uniq(perms);
}

3. 数据权限关联上下级

角色可以设置 relevance 字段控制数据权限是否关联上下级部门,实现灵活的数据隔离策略。

📈 权限架构的优势特点

模块化设计

权限管理作为独立模块,代码结构清晰,便于维护和扩展。

缓存优化

权限信息采用缓存机制,减少数据库查询压力,提升系统性能。

灵活配置

支持动态权限分配,菜单、数据范围均可灵活配置。

安全可靠

完善的Token验证机制和权限校验流程,确保系统安全。

易于扩展

权限模型设计合理,便于集成第三方认证和授权系统。

🛠️ 实际应用场景

场景一:多租户数据隔离

通过部门权限控制,不同部门用户只能访问本部门数据,实现数据安全隔离。

场景二:分级管理

上级部门可以查看下级部门数据,下级部门无法查看上级数据。

场景三:功能权限控制

通过菜单权限控制,实现不同角色拥有不同的功能访问权限。

🔧 最佳实践建议

  1. 合理规划角色体系:根据业务需求设计角色层级
  2. 精细化权限分配:避免过度授权,遵循最小权限原则
  3. 定期权限审计:定期检查权限分配情况,确保安全合规
  4. 缓存策略优化:根据业务特点调整权限缓存时间

🎯 总结

cool-admin(midway版)的数据权限架构通过巧妙的RBAC扩展模型,实现了灵活、安全、高效的权限管理。其四级权限控制体系、动态权限刷新机制和细粒度权限控制能力,为构建企业级后台管理系统提供了坚实的技术基础。

无论是中小型项目还是大型企业应用,cool-admin的权限架构都能满足复杂的权限管理需求,是开发者构建安全可靠后台系统的理想选择。✨

【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、typescript、typeorm、mysql、jwt、vue3、vite、element-ui等构建 【免费下载链接】cool-admin-midway 项目地址: https://gitcode.com/gh_mirrors/co/cool-admin-midway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值