c4accesscontrol

0.0.2 • Public • Published

C4AccessControl

模块介绍

C4AccessControl是基于RBAC(基于角色权限控制)模型进行设计的权限控制框架(模块),需要配置C4WebService模块进行使用(已内置ACL解析和控制逻辑)。 其中主要概念有:

  • 资源矩阵

    • 用于描述对资源可以进行的操作,包含create、read、update、delete四种操作,对应RESTFul API的POST、GET、PUT/PATCH、DELETE的METHOD;
    • 包含每种操作可以包含的用户关系描述,“own”和“any”,对应为当前用户关联和所有用户关联;
    • 支持对静态资源的配置
  • 权限矩阵

    • 权限矩阵是与角色关联的对资源的权限设置
  • 角色

    • 角色是与权限关联的用于权限管理的逻辑概念,即权限只有角色直接关联;
    • 角色是赋予用户的不同权限的逻辑组,即用户只与角色关联;
  • 用户

    • 用户是最终执行权限判定的载体,但其不与权限直接关联,而是通过关联角色来赋予权限

使用

  • 用ACL注解对方法进行标记;
  • 注解项包含:
/**
* 资源矩阵配置信息
*/
export interface ACResourceMatrix {
    /**
    * 最终会设置为path
    * TODO: 该处设计不合理,不应该设置为path,应该为资源名或ID
    * 增加一个对象来存储包含路径的向量
    */
    resource: string;
    /**
    * 显示名称(省略将为resource)
    */
    desc?: string;

    /**
    * 分组信息(默认值是空字符串)
    */
    group ?: string;

    /**
    * TODO: 这个desc是用于构建UI时给用户展示使用,
    * 需要与Java端的实现沟通,并在档案(账户/权限)服务中增加该列的记录
    */
    groupDesc?: string;

    /**
    * 操作(省略将为动作默认方法,如GET对应read)
    * TODO: 这里的desc是对action的描述,用于构建UI时给用户展示使用
    * 需要与Java端的实现沟通,并在档案(账户/权限)服务中增加该列的记录
    */
    action?: {
        create ?: actionOp;
        read   ?: actionOp;
        update ?: actionOp;
        delete ?: actionOp;
        createDesc ?: string;
        readDesc   ?: string;
        updateDesc ?: string;
        deleteDesc ?: string;
    };

    // 查询条件上表示用户标识的参数名
    paramUser  ?: string;

    // body体上表示用户表示的属性名
    bodyUser   ?: string;

    // 后置过滤配置
    /**
    * TODO: 后置过滤的配置
    */
    filters    ?: any;

    // 是否是静态资源的ACL
    staticRes  ?: boolean;

    // 静态资源ACL的path匹配正则
    staticPathReg ?: RegExp;
};

类s

  • C4AccessControl

    • 说明:C4AccessControl对象,提供资源矩阵上传、权限矩阵下载、用户权限验证功能

    • 路径:./src/C4AccessControl.ts

    • 成员变量:

      • m_bInit,是否初始化
      • m_ACLCache,权限的Cache
      • m_ACLCommunicator,通讯对象,用于同步资源、权限矩阵等
      • m_bDisable,功能是否开启
      • m_Logger,日志对象
      • m_ResourcesMatrix,资源矩阵
      • m_StaticResourcesMatrix,静态资源矩阵
      • m_RolesInfo,权限矩阵
    • 成员方法:

      • init
      /**
      * 初始化
      * @param config C4AccessControlConfig
      */
      async init(config: C4AccessControlConfig)
      

      • isEnabled
      /**
      * 获取启用状态
      */
      isEnabled()
      

      • isInit
      /**
      * 获取初始化状态
      */
      isInit()
      

      • addAccCtrlTarget
      /**
      * 设置权限矩阵
      * @param accCfg ACResourceMatrix
      */
      addAccCtrlTarget(accCfg : ACResourceMatrix)
      

      • getUserRoles
      /**
      * 获取权限组
      * @param userID 用户ID
      */
      private async getUserRoles(userID : string)
      

      • getRolePossession
      /**
      * 获取权限组动作属性
      * @param roleName 角色名
      * @param resource 资源名
      * @param action 动作
      */
      private getRolePossession(roleName: string, resource: string, action: string)
      

      • getResourceConfig
      /**
      * 根据资源名获取资源矩阵
      * @param resource 
      */
      getResourceConfig(resource : string)
      

      • getStaticResourceConfigs
      /**
      * 获取静态资源的资源矩阵
      */
      getStaticResourceConfigs()
      

      • AccCtrlAuth
      /**
      * 判断权限
      * @param resource 权限接口资源名
      * @param inObj 入参对象
      */
      async AccCtrlAuth(resource: string, user: string, action: string | undefined, paramUser: string | undefined): Promise<{
          role : string;
          pass : boolean;
          user?: string;
      }> 
      

      • updateAclMatrix
      /**
      * 上传权限矩阵
      */
      async updateAclMatrix()
      

      • launch
      /**
      * 启动
      */
      async launch()
      

      • reset
      /**
      * 重置
      */
      async reset()
      

  • ACLCache

    • 说明:ACL的Cache接口对象

    • 路径:./src/C4AccessControlTypes/C4AccessControlConfig.ts

    • 成员变量:无

    • 成员方法:

      • init,初始化
      • release,释放
      • getCache,获取缓存
      • setCache,设置缓存

  • ACLCommunicator

    • 说明:ACL的通讯接口对象

    • 路径:./src/C4AccessControlTypes/C4AccessControlConfig.ts

    • 成员变量:无

    • 成员方法:

      • init,初始化
      • release,释放
      • upload,上传
      • sync,同步权限矩阵
      • syncUserRoles,同步用户的角色

  • ACLDefaultCache

    • 说明:测试用的Cache,在内存中存储

    • 路径:./src/C4AccessControlUtils/ACLDefaultCache.ts

    • 成员变量:

      • m_ACLCached,cache对象
    • 成员方法:同ACLCache


  • ACLRedisCache

    • 说明:Redis Cache,在Redis中存储

    • 路径:./src/C4AccessControlUtils/ACLRedisCache.ts

    • 成员变量:

      • m_RedisClient,Redis客户端
    • 成员方法:同ACLCache


  • ACLDemoCommunicator

    • 说明:用于提交和同步资源矩阵、权限矩阵的Communicator的Demo

    • 路径:./src/C4AccessControlUtils/ACLDemoCommunicator.ts

    • 成员变量:

      • m_Token,token
      • m_ServerHost,服务的地址
    • 成员方法:同ACLCommunicator


Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.2
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.0.2
    0
  • 0.0.1
    0

Package Sidebar

Install

npm i c4accesscontrol

Weekly Downloads

0

Version

0.0.2

License

none

Unpacked Size

113 kB

Total Files

36

Last publish

Collaborators

  • sextant