编辑
2024-06-05
随意记录
00
请注意,本文编写于 877 天前,最后修改于 0 天前,其中某些信息可能已经过时。

目录

1、通讯录
2、通讯录节点表
3、通讯录成员信息表
4、其他通讯方式
5、分机号分配表
6、节点访问控制规则
7、节点访问控制规则白名单
8、默认访问控制规则(需要内置6条默认规则数据)
9、管理员操作通讯录节点授权

1、通讯录

CREATE TABLE `directory_book` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '通讯录ID', `book_type` tinyint NOT NULL COMMENT '类型: 1-企业通讯录, 2-内部通讯簿, 3-外部通讯簿', `code` varchar(32) DEFAULT NULL COMMENT '内置簿标识: ENTERPRISE/INTERNAL/EXTERNAL; 用户自建簿为NULL', `name` varchar(64) NOT NULL COMMENT '通讯录名称,同时作为该簿根节点的显示名', `read_only` tinyint NOT NULL DEFAULT 0 COMMENT '是否只读: 1-只读(企业通讯录,数据来自同步), 0-可编辑', `data_source` tinyint NOT NULL DEFAULT 0 COMMENT '同步来源: 0-本地维护, 1-LDAP, 2-OA, 3-EHR', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 1-启用, 0-停用', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_directory_book_code` (`code`, `active_unique`), UNIQUE KEY `uk_directory_book_type_name` (`book_type`, `name`, `active_unique`), KEY `idx_directory_book_type` (`book_type`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通讯录簿';

2、通讯录节点表

CREATE TABLE `directory_node` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '节点ID', `parent_id` bigint unsigned DEFAULT NULL COMMENT '上级节点ID,根节点为NULL', `book_id` bigint unsigned NOT NULL COMMENT '所属通讯录ID,指向directory_book.id', `code` varchar(32) DEFAULT NULL COMMENT '内置节点标识: ROOT-通讯录根节点, UNASSIGNED-无归属人员名单; 普通节点为NULL', `name` varchar(64) NOT NULL COMMENT '节点名称; 根节点取名自directory_book.name', `sort` bigint unsigned NOT NULL DEFAULT 0 COMMENT '同级排序值,稀疏分配(基准10000/步长100)', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 1-启用, 0-停用', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, `root_book_id` bigint unsigned GENERATED ALWAYS AS (CASE WHEN `parent_id` IS NULL AND `code` = 'ROOT' AND `deleted_at` IS NULL THEN `book_id` ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_directory_node_book_code` (`book_id`, `code`), UNIQUE KEY `uk_directory_node_root` (`root_book_id`), UNIQUE KEY `uk_directory_node_parent_name` (`parent_id`, `name`, `active_unique`), KEY `idx_directory_node_parent_sort` (`parent_id`, `sort`), KEY `idx_directory_node_book` (`book_id`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通讯录节点树';

3、通讯录成员信息表

CREATE TABLE `directory_member` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '成员ID', `node_id` bigint unsigned NOT NULL COMMENT '所属节点ID,指向directory_node.id', `book_id` bigint unsigned NOT NULL COMMENT '所属通讯录ID(冗余自节点,便于按簿查询)', `employee_no` varchar(32) DEFAULT NULL COMMENT '工号,企业/内部通讯簿必填且簿内唯一;外部通讯簿可空', `name` varchar(64) NOT NULL COMMENT '成员姓名', `account` varchar(64) DEFAULT NULL COMMENT '账号', `job_title` varchar(64) DEFAULT NULL COMMENT '岗位(企业) / 组内职务(内部) / 职务(外部)', `company_email` varchar(128) DEFAULT NULL COMMENT '公司邮箱', `office_location` varchar(128) DEFAULT NULL COMMENT '办公地点', `origin_node_id` bigint unsigned DEFAULT NULL COMMENT '原所属节点ID(弱引用,节点可能已删除)', `origin_node_name` varchar(64) DEFAULT NULL COMMENT '原所属节点名称快照,移入无归属名单时记录', `origin_node_path` varchar(512) DEFAULT NULL COMMENT '原所属节点完整路径快照', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 1-正常, 0-已删除(归档)', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_directory_member_book_employee_no` (`book_id`, `employee_no`), KEY `idx_directory_member_node` (`node_id`, `status`), KEY `idx_directory_member_book` (`book_id`, `status`), KEY `idx_directory_member_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通讯录成员';

4、其他通讯方式

CREATE TABLE `directory_member_contact` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `member_id` bigint unsigned NOT NULL COMMENT '成员ID', `contact_type` tinyint NOT NULL COMMENT '类型: 1-手机号, 2-邮箱, 3-其他', `contact_value` varchar(128) NOT NULL COMMENT '联系方式', `remark` varchar(128) DEFAULT NULL COMMENT '备注(如:私人联系/助理代持)', `sort` bigint unsigned NOT NULL DEFAULT 0 COMMENT '排序', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_member_contact_value` (`member_id`, `contact_type`, `contact_value`, `active_unique`), KEY `idx_member_contact_member` (`member_id`, `sort`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成员其他通讯方式';

5、分机号分配表

CREATE TABLE `directory_extension` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `member_id` bigint unsigned NOT NULL COMMENT '使用人成员ID', `extension_no` varchar(16) NOT NULL COMMENT '分机号码', `area_code` varchar(8) DEFAULT NULL COMMENT '区号', `long_number` varchar(32) DEFAULT NULL COMMENT '系统内长号', `sip_account` varchar(64) DEFAULT NULL COMMENT 'SIP账号', `sip_password` varchar(128) DEFAULT NULL COMMENT 'SIP账号密码(加密存储)', `outbound_prefix` varchar(32) DEFAULT NULL COMMENT '外呼出局号码', `did_numbers` varchar(512) DEFAULT NULL COMMENT '外线直拨号,多个以;分隔', `site_id` bigint unsigned NOT NULL COMMENT '归属站点ID', `office_location` varchar(128) DEFAULT NULL COMMENT '办公地点', `assign_note` varchar(128) DEFAULT NULL COMMENT '分配说明', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 1-已分配, 0-已回收', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_extension` tinyint GENERATED ALWAYS AS (CASE WHEN `status` = 1 AND `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_extension_no` (`site_id`, `extension_no`, `active_extension`), KEY `idx_extension_member` (`member_id`, `status`), KEY `idx_extension_site` (`site_id`, `status`), KEY `idx_extension_long_number` (`long_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成员分机号分配';

6、节点访问控制规则

CREATE TABLE `directory_access_rule` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `node_id` bigint unsigned NOT NULL COMMENT '作用节点ID,引用 directory_node.id', `level` tinyint NOT NULL DEFAULT 0 COMMENT '级别: 0-不可访问, 1-分机号码, 2-详细信息, 3-全部信息', `inherit_from_parent` tinyint NOT NULL DEFAULT 1 COMMENT '是否继承上级: 1-继承(忽略本行level), 0-使用本行level', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_access_rule_node` (`node_id`, `active_unique`), KEY `idx_access_rule_level` (`level`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节点访问控制规则(每节点至多一条生效行)';

7、节点访问控制规则白名单

CREATE TABLE `directory_access_scope` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `rule_id` bigint unsigned NOT NULL COMMENT '所属规则ID,引用 directory_access_rule.id', `scope_type` tinyint NOT NULL COMMENT '类型: 1-按分组(节点), 2-按人员(成员)', `scope_node_id` bigint unsigned DEFAULT NULL COMMENT 'scope_type=1 时有效: 允许的分组节点ID', `scope_member_id` bigint unsigned DEFAULT NULL COMMENT 'scope_type=2 时有效: 允许的成员ID', `level` tinyint NOT NULL COMMENT '白名单授予的级别: 1-分机号码, 2-详细信息, 3-全部信息', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_access_scope_rule_target` (`rule_id`, `scope_type`, `scope_node_id`, `scope_member_id`, `active_unique`), KEY `idx_access_scope_rule` (`rule_id`), KEY `idx_access_scope_member` (`scope_member_id`), KEY `idx_access_scope_node` (`scope_node_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访问控制白名单(规则上的分组/人员例外)';

8、默认访问控制规则(需要内置6条默认规则数据)

CREATE TABLE `directory_access_default` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `position` tinyint NOT NULL COMMENT '相对位置: 1-自己所在分组, 2-父级分组, 3-兄弟分组, 4-直接子分组, 5-更深层的下级分组, 6-其他无关分组', `level` tinyint NOT NULL COMMENT '默认级别: 0-不可访问, 1-分机号码, 2-详细信息, 3-全部信息', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`), UNIQUE KEY `uk_access_default_position` (`position`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='默认访问控制矩阵(固定6行,后台可编辑)';

9、管理员操作通讯录节点授权

CREATE TABLE `directory_admin` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint unsigned NOT NULL COMMENT '平台用户ID,引用 ums_user.id(须为业务运营人员)', `role_id` bigint unsigned NOT NULL COMMENT '角色ID,引用 ums_role.id(application_code=directory 的角色)', `node_id` bigint unsigned NOT NULL COMMENT '授权管理的节点ID,引用 directory_node.id', `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 1-启用, 0-停用', `created_at` datetime(3) NOT NULL COMMENT '创建时间', `updated_at` datetime(3) NOT NULL COMMENT '更新时间', `creator` bigint unsigned DEFAULT NULL COMMENT '创建人', `updater` bigint unsigned DEFAULT NULL COMMENT '更新人', `deleted_at` datetime(3) DEFAULT NULL COMMENT '删除时间', `active_unique` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted_at` IS NULL THEN 1 ELSE NULL END) VIRTUAL, PRIMARY KEY (`id`), UNIQUE KEY `uk_directory_admin_user_node_role` (`user_id`, `node_id`, `role_id`, `active_unique`), KEY `idx_directory_admin_node` (`node_id`, `status`), KEY `idx_directory_admin_user` (`user_id`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通讯簿管理员(用户×节点×角色)';

本文作者:枣子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!