CRM(Customer Relationship Management)–客户关系管理系统,是指利用软件、硬件和网络技术,为企业建立一个客户信息收集、管理、分析和利用的信息系统。以客户数据的管理为核心,记录企业在市场营销和销售过程中和客户发生的各种交互行为,以及各类有关活动的状态,提供各类数据模型,为后期的分析和决策提供支持。
简而言之,CRM系统是主流高效的客户管理系统,在维护客户,挖掘新客户,规避客户流失及企业内部恶意竞争,降低营销成本上有非常重要的作用。
项目背景
笔者本次服务的甲方,在培训行业深耕多年,由于成立时间较早,所以在信息化管理较为薄弱。目前管理用户的方式还是通过excel录入管理,并且通过邮件进行传输。这样的管理方式,不仅效率低下,而且一定程度上,容易出现数据泄露。
于是甲方希望能够有一套CRM,能够覆盖培训的招生,报名,学生管理等流程。由于较高的保密需求,所以需要进行研发团队开发完成后,在公司内网部署。
在征得甲方同意后,本文仅介绍项目权限管理和用户报名流程的设计。
基于RBAC(Role-Based Access Control)的权限管理
RBAC模型
一个完善的管理系统底层逻辑,权限管理,往往是系统架构的第一步。权限管理中,通常4个元素是无法回避的,分别为:
用户(User);角色(Role);权限(Permission);资源(Resources)
在数据库表结构设计中,我们通常使用一对多(OneToMany)或多对多(ManyToMany)管理用户(User);角色(Role);权限(Permission)。
用户;角色;权限关系示意图
在完成了以上基础逻辑确定以后,我们能够很轻易搭建起一套基本的权限体系:即创建用户(Create User);分配角色(Assign Role);赋予权限(Grant)。
流程分析
管理员(Admin)流程:
创建菜单及功能,开发人员路由配置菜单对应URL
创建角色,分配角色可访问菜单(可访问URL)
创建用户,为用户配置对应的角色(Role)
用户操作流程
CRM系统左侧为菜单栏,用户登陆后,系统根据分配给用户的角色,以及角色对应的权限对菜单进行展示。
在用户进入菜单后,我们还需要二次判断当前用户的读写权限,对部分页面的内容或者操作进行屏蔽。
原型设计如下:
以上是简化版的RBAC权限管理设计方案,在现实生活中,还需要根据实际的情况,权限管理中,是否需要包含字段权限,以及字段权限的规则(只读,读写,不可见)。
报名流程设计
需求分析
培训机构在进行招生时,通常的流程是:
用户咨询–销售记录用户咨询内容–销售跟进用户–用户填写报名信息–销售审核–用户付款–创建学员信息。
报名流程图
以下是对应流程中,关于方案设计的主要信息:
主要对象:销售,用户;
操作设备:PC端为主,可能出现移动设备;
支付需求:是;(需要用户申请对应的账号及API)
网络需求:是;
其他:部分字段脱敏处理
操作人员:销售
原型设计
新建用户/用户详情
在此,我们简化了部分字段,给读者展示了一个简单的新建用户/查看详情页。由于B端系统的非标性,在某些情况下,需要我们调整其中的功能权限和展示字段。这就需要我们联系前期设计的权限管理,实现功能与需求的高度适配。
方案总结
由于本次定制程度较高,且开发周期时间不长,所以在底层架构设计中,我们多采用比较成熟的方案,如RBAC权限方案,高复用度的前端页面,基于角色权限的二层级菜单。减少了开发量和部分未知风险,在规定的时间内完成了开发任务。