FastAdmin后台的数据隔离,这个场景最近经常遇到,一个系统分了好多个角色/端,每个角色/端的权限不同,能看到的数据也就不同,这就涉及到数据隔离。
举个简单例子吧,用户角色为平台+业务员+机构+学员的系统,后台角色如下:
- 系统的最高权限是平台端,能看到所有数据;
- 业务员负责开拓机构,他能看到机构的数据;
- 机构发展学员,能看到机构下的学员数据。
后台的一些列表,比如:
- 机构列表,平台能看到并管理所有的,业务员只能看到他所发展的机构,机构看不到这个列表;
- 学员列表,平台能看到并管理所有的,业务员可以查看相关机构的,机构只能查看并管理自己机构下的;
这是两个很常见也很典型的列表,几个角色共用一个列表(后台控制器),但他们看到的数据及所能做的操作是不一样的,这就是数据隔离。
那怎么实现数据隔离呢?我用的是FastAdmin框架,就以这个框架做下讲解,以下都是后台相关的。
角色组和权限规则
- 预先配置好权限规则;
- 分配角色组的权限;
控制器
- 首先要在控制器里判断当前管理员的角色;
- 根据其角色在列表筛选中加入相应的条件;
- 根据其角色在模板中assign/assignConfig相应的配置;
模板页html
- 模板页面根据权限显示、隐藏相关的按钮和入口;
- 接收控制器assign/assignConfig的值显示、隐藏相关的按钮和入口;
模板页对应的js文件
- 权限到了js层应该会自动判断相关按钮的显示隐藏;
- 接收控制器assginConfig的值并显示/隐藏某些列和某些按钮。 这步操作可参阅 FastAdmin后台列表根据条件显示隐藏某一列字段
总结就是,控制器只输出相应权限的数据和配置,前端模板和JS根据权限和配置来展示这些数据。
说起来是比较简单的,具体操作起来要根据项目的业务逻辑去写代码,方方面面都要考虑周到,不然没有权限的人看到了不该看到的数据并编辑或删除了,而有权限的人反而不能正常操作,那事儿就大了。