You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AWS Amplify实现员工管理系统细粒度访问控制的方案咨询

最优实现方案

1. Cognito 身份配置设计(解决权限变更维护问题)

放弃全用户组的实现方式,采用「用户组做大角色分类 + 自定义属性存动态权限维度」的组合方案,避免用户组数量爆炸、权限变更维护成本高的问题:

  • Cognito用户组仅设置3个大类,基本不会变更:
    • HR:人力资源全角色
    • BusinessLeader:业务线管理人员(包含经理、总监、副总裁)
    • RegularStaff:普通员工、主管(默认无系统访问权限)
  • Cognito自定义属性存储可变的权限维度字段,员工调岗、晋升时仅需修改对应属性即可,无需调整用户组:
    • custom:department:所属部门/业务单元,示例值unit1_dept1、hr
    • custom:position_level:职位层级,用数字编码(数值越小层级越高),示例值:1=副总裁、2=总监、3=经理、4=主管、5=普通员工
  • 前端运维能力实现:无需使用AdminUI,自行封装一个Lambda函数,通过Cognito Admin API实现用户属性修改、用户组调整的能力,仅对HR或者高级管理人员开放该Lambda的调用权限即可,所有员工账号、权限调整操作都可以在前端完成。

2. GraphQL 权限规则实现(解决职位层级权限控制问题)

利用Amplify GraphQL @auth指令的动态条件校验能力,直接通过JWT令牌中的Cognito自定义属性做权限判断,无需额外开发自定义Resolver:

type Employee 
  @model
  @auth(
    rules: [
      # HR组拥有所有员工数据的读写权限
      { allow: groups, groups: ["HR"], operations: [read, create, update, delete] }
      # 业务线管理人员权限:同部门 + 仅可访问层级低于自己的员工
      { 
        allow: groups, 
        groups: ["BusinessLeader"],
        operations: [read, create, update],
        condition: { and: [
          # 访问者与被访问员工属于同一部门
          { eq: ["$department", "{employee.department}"] },
          # 访问者的职位层级高于被访问员工(数字更小)
          { lt: ["$position_level", "{employee.position_level}"] }
        ]}
      }
    ]
  ) {
  id: ID!
  name: String!
  department: String!
  position_level: Int!
  # 其余员工信息字段
}

注:$department和$position_level会自动从当前请求用户的JWT令牌自定义属性中读取,{employee.department}和{employee.position_level}为被访问员工记录的对应字段,所有校验逻辑在AppSync层自动执行,无前端越权风险。
RegularStaff组未配置任何权限规则,默认无法访问系统数据,符合需求。

3. 权限变更即时生效方案

员工晋升、调岗修改完Cognito属性后,默认下次登录刷新JWT时权限自动生效,如果需要即时生效,可以在前端调用Auth.currentAuthenticatedUser({ bypassCache: true })强制刷新当前用户的令牌,立即同步最新权限。

方案优势

  • 维护成本极低:用户组仅3个固定分类,权限调整仅需修改自定义属性,无需频繁调整用户组
  • 无需依赖AdminUI:所有账号、权限运维能力都可以通过前端调用封装好的Lambda实现
  • 权限逻辑集中管理:所有校验逻辑都在GraphQL Schema中声明,无需额外开发后端代码
  • 扩展性强:后续如果需要新增层级、或者增加跨部门的特殊权限,仅需调整@auth的条件规则即可,无需重构身份体系。

内容的提问来源于stack exchange,提问作者hellocng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:27:09