通讯录同步

只有加入到企业微信通讯录中的用户才可以访问自建应用企业微信小程序。因此,在系统初始化时,我们需要先进行通讯录同步操作

当第一次同步完部门和成员后,以后所有的变更(增、删、改)都会自动进行同步

依次进入:首页->设置->企业微信->通讯录管理

contacts-sync-zhcn

部门与角色

企业微信中的部门对应的是CabloyJS中的角色。当同步部门时,将部门信息保存在数据表aWxworkDepartment中,同时创建一个角色

1. 根部门

企业微信中的根部门默认对应的是CabloyJS中的角色internal/wxwork的子角色。此默认角色可以定制

a-wxwork/backend/src/config/config.js

  // sync
  config.sync = {
    department: {
      roleContainer: 'internal',
      roleTop: 'wxwork',
    },
  };

2. 角色树

CabloyJS针对各类业务开发的需求,提炼了一套内置角色,并形成一个规范的角色树。实际开发中,可通过对角色树的扩充和调整,实现各类角色相关的需求

企业微信中的部门树同步到CabloyJS中的角色树,就是进行角色扩充的典型应用

在CabloyJS中,部门岗位本质上都是角色,因此都需要组织在角色树中。比如张三是软件部的开发经理,那么角色结构就应该是这样:XXX企业 -> 软件部 -> 开发经理,然后把用户张三加入到角色开发经理中,从而方便权限的授予和资源的分配

更多信息,请参见:角色基本概念

3. 角色与授权

CabloyJS提供了完备、而且灵活的角色与授权系统,请参见:角色授权

4. 获取角色

const role = await this.ctx.meta.role.get(where);
  • where:可传入以下参数的组合进行角色的检索
名称 说明
id 角色Id
roleName 角色名称
catalog 是否为目录角色
system 是否为系统角色
roleIdParent 父角色Id

5. 获取部门

模块a-wxwork提供了一个model: department。我们可以在自己的业务模块中通过这个model来获取企业微信的部门信息。比如,我们可以通过roleId查找对应的departmentId

const modelDepartment = this.ctx.model.module('a-wxwork').department;
const department = await modelDepartment.get(where);
  • where:可传入以下参数的组合进行部门的检索
名称 说明
roleId 角色Id
departmentId 部门Id
departmentParentId 父部门Id
departmentName 部门名称

成员与用户

企业微信中的成员对应的是CabloyJS中的用户。当同步成员时,将成员信息保存在数据表aWxworkMember中,同时创建一个用户

获取当前登录用户

当用户登录成功后,我们可以直接通过this.ctx.user.op来获取当前用户信息

获取成员

模块a-wxwork提供了一个model: member。我们可以在自己的业务模块中通过这个model来获取企业微信的成员信息。比如,我们可以通过userId查找对应的memberId

const modelMember = this.ctx.model.module('a-wxwork').member;
const member = await modelMember.get(where);
  • where:可传入以下参数的组合进行成员的检索
名称 说明
userId 用户Id
memberId 成员Id

在企业微信中,也是用UserId来标识一个成员。为了避免两个系统中术语的冲突,企业微信中的UserId在CabloyJS中采用MemberId来表述