精华内容
下载资源
问答
  • 数据权限设计思路

    万次阅读 2019-07-08 11:02:11
    https://www.cnblogs.com/landeanfen/p/7760803.html https://www.cnblogs.com/leoxie2011/archive/2012/03/20/2408542.html
    展开全文
  • 任何一个系统中,都离不开权限的设计权限设计 = 功能权限 + 数据权限+字段权限【功能权限】:能做什么的问题。如查询、增删改信息【数据权限】:能看到哪些数据的问题。如查看本人、部门团队、区域或者整个公司、...

            任何一个系统中,都离不开权限的设计

    权限设计 = 功能权限 + 数据权限+字段权限

    【功能权限】:能做什么的问题。如查询、增删改信息【数据权限】:能看到哪些数据的问题。如查看本人、部门团队、区域或者整个公司、甚至整个系统的数据【字段权限】:能看到哪些信息的问题。如联系人姓名,但是不能查看到联系人地址、联系人电话这样的

    • 1.功能权限设计

            常常是基于RBAC(Role-Based Access Control)的一套设计方案

    • 2.数据权限设计

    • 2.1数据权限设计分析

            根据不同的业务场景,则权限却不尽相同,应该根据具体的场景巧妙设计;且必须在项目开始时进行设计,不像功能权限一样,在项目结束的时候在追加。数据权限做不到组件级别,必须在项目设计阶段就已经规划好。之前看网上相同有人想基于SPRING切面的原理去实现数据权限,这样就能够做到了低侵入、低耦合,想法非常好。但是现实非常骨感,这样做使整个应用系统效率大减折扣,相同对数据权限的控制策略也非常不灵活

    • 2.2SQL语句可扩展,数据权限设计分析

            数据权限往往作为功能权限的高级行为。能够从数据对象的幅度方面进行控制。比方用户仅仅能看自己的订单、普通会员看不到某数据对象的高级属性(字段)等等。颗粒度这么细的情况下对结果集处理显然是不可能了,这时仅仅能介入到SQL语句中,此时又不想在开发阶段让开发者过多的考虑数据权限的问题,这个时候就需要将sql 和数据权限策略分开。再调用接口的时候,进行数据权限接口的拼接。这样也算做到的代码的低侵入。

            数据权限模块的核心之中的一个就有SQL语句的高效解析处理,SQL处理指依据当前登录人信息及数据权限策略生成一个带有数据权限处理结果的SQL语句。所以这里对SQL语句的解析处理必需要求精确、准确。在开发阶段由开发者把SQL写入到配置文件里,在执行阶段由数据权限取得该SQL进行分析处理(加上数据权限),这样就完毕了SQL的组装处理。

    • 2.3方案

    • 2.3.1 方案一:按照岗位体系建立数据权限

    把权限赋予岗位,再把员工(用户)放在岗位上,从而间接把权限赋予用户。

            有的企业的数据权限很简单,就是普通员工只能看到自己的数据,部门负责人可以看到本部门的数据,高层管理可以看到所有下级部门的数据。这样可以把这套规则直接写死在系统里面,然后根据员工的任职岗位和部门去读取对应的数据范围即可。

    e1871a0cf2ceee954c329e03ff9324f8.png

    此方案的典型适用场景就是销售管理系统、客户关系管理系统(CRM)

    特点:数据权限的划分严格按照员工岗位体系划分

    优点:设置简单,只需要录入需要限制的单据,选择是按照部门或者按照下属来限制即可。

    缺点:需要维护一套岗位体系;不够灵活,无法查看跨部门的数据、上级领导的数据等

    也就是说,使用岗位体系数据权限只有两种结果,要么受岗位体系限制,要么没有限制(能看到所有数据), 其他需要限制但不是按照岗位体系限制的需求,则无法满足

    比如有些集团中心的财务、人事等岗位,需要看到整个集团的数据,但是他们又不是集团领导,其他人也不是他们的下属,这种情况岗位体系数据权限是满足不了的

    • 2.3.2 方案二:针对角色设置数据权限

    把权限赋予角色,角色叠加到用户上,从而间接把权限赋予用户。

    角色和岗位相比,有两个好处:1、岗位是在企业组织架构里面设立的,不能随意修改,但是角色是可以灵活设置的,比如可以设置一个“华南大区报销负责人”的角色,但是这个岗位在企业组织架构中不存在,所以不能设立这样一个岗位。2、角色可以多个叠加,比如张三又负责华南大区的费用报销,又负责华东大区的费用报销,就可以把“华南大区报销负责人”和“华东大区报销负责人”两个角色都赋予张三。但是岗位上张三是一个“报销专员”,并没有身兼多职。

    所以,角色比岗位要灵活很多。

    将单据中的每一个字段都作为一个数据权限对象,然后对这些字段设置比较条件,这些比较条件组合起来就形成一个针对该单据的数据规则。每一个数据规则有一个名称。

    比如,我们可以设置一个数据规则,条件是:客户所在地区等于A,并且,客户状态为待续签。那么这条数据规则就可以看到A地区待续签的客户,我们可以把它命名为“A地区待续签”。

    所以,数据规则其实是某张单据的一个数据范围,也就是某部分的数据。

    abaf87a0b1040983e89d8934013d3a85.png

    比较条件可以设置变量,比如客户的业务员为“当前用户对应的业务员”,更灵活更方便维护。

    设置好数据规则之后,我们把这个数据规则跟角色关联起来,就可以限制该角色能看到的数据范围了。

    fb9bbe59239a34168a38f18ad66e32a0.png

    如果不设置数据权限,则默认能看到所有数据。

    如果有多个角色赋予同一个用户,且不同角色的数据权限不同,则取范围的并集。

    此方案完美解决了方案一的问题,可以通过设置角色的权限来灵活地控制每一个用户的权限,满足很多特殊化的场景。

    缺点:1、需要维护用户的角色;2、数据规则虽然可以用变量,如果是多层的计算逻辑,则无法满足。

    • 2.3.3 方案三:岗位数据权限和角色数据权限的结合

    企业的数据权限需求,无非就两种,有些数据是基于岗位体系划分数据权限的,有些数据是需要灵活设置的。所以我们把方案一和方案二结合起来,就形成了适用性更高的方案三。

    此方案中,可以对角色设置岗位体系数据权限,同时还可以对角色设置其他的数据规则。也就是说,岗位体系数据权限和数据规则权限可以灵活切换、叠加来设置。

    有的人可以只按照岗位体系数据权限来限制,有的人可以只按照数据规则来限制;有的人还可以又有岗位体系数据权限,又有数据规则权限。

    如果同一角色同一单据,又设置了岗位体系数据权限,又设置了数据规则权限,则取两者的交集。

    举例:

    企业内所有员工都要使用费用报销模块,要求普通员工只能看到自己的数据,领导可以看到直属下级的数据。同时集团的财务张三负责华南和华东的费用报销,李四负责华北和华中的费用报销。

    此时可以设置三个角色:

    • 角色“岗位费用报销”,设置岗位体系数据权限,选择直接下属,并把角色赋予除张三和李四外的所有用户。则这些用户可以看到自己的数据及自己直接下属的数据。(普通员工没有下属,只能看到自己的数据)。

    • 角色 “华南和华东的报销专员”,设置了数据规则为“报销部门为华南 或 报销部门为华东”,该角色赋予张三。

    • 角色 “华北和华中的报销专员”,设置了数据规则为“报销部门为华北 或 报销部门为华中”,该角色赋予李四。

    普通员工和领导有岗位体系数据权限,财务张三和李四有数据规则数据权限。

    76b899c4a9851b36af1b94bd789bb772.png

    22a7c315ceab5f2faade932d043a0a8a.png

    方案三综合了以上两者的优点,更加灵活便捷。很少企业是完全按照岗位体系来划分数据权限的,也很少企业所有的数据权限都可以用数据规则来限制,大多数是两种需求都有的情况。所以方案三的适用性更好,更适用于全员应用的系统。

    方案都有好坏,主要是看不同的系统及企业权限管理需求。核心方案是:数据范围划分清晰、准确,设置灵活、维护成本低。

    数据是一个企业最重要的资产。很多企业之间的竞争,其实也是数据之争,资源之争。数据权限,就如同为数据筑起的一座座城墙,清晰地划分了用户能看到的数据范围,为数据提供安全保障。

    展开全文
  • 关于权限设计一般来说,权限模块对于每一个系统而言都是最基础的模块,根据项目需求和功能的不同,设计方案也有许多。但从大的方面来说,可以将权限分为两大类型:功能权限和数据权限功能权限主要控制不同的资源主体...

    9e95a6a5f7dee76ff23c4ef41ea881a2.gif

    关于权限设计

    一般来说,权限模块对于每一个系统而言都是最基础的模块,根据项目需求和功能的不同,设计方案也有许多。但从大的方面来说,可以将权限分为两大类型:功能权限和数据权限

    功能权限

    主要控制不同的资源主体(用户、角色、组织等)有操作不同的资源的权限。比如常见的不同的角色能访问不同的页面(菜单权限),以及具有操作同一页面的不同功能(按钮权限)等等。对于java开发而言,功能权限的开发相对来说要简单很多,有很多现成的框架可以实现。我推荐用shiro,因为简单易用,而且能实现按钮级别的控制。

    数据权限

    主要控制不同的资源主体(用户、角色、组织等)有查看不同的数据信息的权限。数据权限又分为数据行权限和数据列权限,本篇文章主要研究一下数据行权限的控制。

    前提

    数据权限一般和业务的关系非常紧密,可能不同的业务有不同的设计方案,所以很难有一种统一而使用简单的设计方案。我的想法是:基于角色-部门的控制方式。即拥有某个角色的人,能看见当前角色所包含的部门中的数据。为了更好的设计数据权限,我总结了一下几种数据。

    数据分类

    公开数据:字面意思,就是公开的数据,不需要控制数据权限。

    部门数据:属于某个部门的数据,只有部门的人员可以查看。

    私有数据:用户自己的数据,只能自己查看。

    几种场景

    某条数据属于多个部门的情况。

    某领导可以跨部门查看数据。

    可以查看子部门的数据。

    私有数据可以分享给别人,部门,或者公开。

    设计方案与思路

    百度上一堆关于数据权限的设计方案,基本上都是基于用户-角色-部门这个来设计,我的思路也和这个差不多,用户与数据角色挂钩,数据角色与部门挂钩,这就比直接角色与部门挂钩要相对灵活一些。虽然某个用户只能属于一个部门,但是有可能出现上面提到的第2中场景,跨部门的情况。

    8d8e3b13233f31eebc81058eeaafb139.png

    我的设计思路是提供一个方法,写业务的人员需要将查询的表名传给这个方法,然后我返回一段sql,这段sql只是在原来的表上进行数据权限过滤,返回的数据字段和原表一模一样,然后业务代码编写者再把这个sql作为参数传递到DAO层,拼接到FROM后面或者JOIN后面即可。这样无论是单表查询还是多表查询,都可以实现数据权限控制。

    还有一种思路是就是用mybatis拦截器去拦截sql,然后对sql进行改造拼接,但是这样我需要去拦截每一条select的sql,可能会对性能有影响。

    为了少改原有的业务表,同时统一对系统中的表进行数据权限控制,我设计了一张映射表,来映射数据表,部门,用户之间的关系。

    映射表

    映射表字段如下

    ed7676032d55bee6de07b2525dec418d.png

    主键字段为字符串纯属个人习惯。有了这张映射表,我们就能根据映射表中的部门ID和用户ID是否为空来进行数据权限的识别,同时也能修改数据的所属权限(公开,部门,私有)。

    ddcb4364271c4dce488e3446f604988e.png

    因为有私有数据分享给其他人或者部门,单条数据属于多个部门的情况,所以数据表与映射表应该是一对多的关系。

    提供过滤sql的方法

    代码如下

    /**
    *
    数据权限sql拼接*
    *
    @author chunhui.tan
    *
    @创建时间 201919日 下午4:30:09
    */
    @Componentpublic class DataSqlFilter {
    @Autowiredprivate TsysUserRoleService tsysUserRoleService;@Autowiredprivate TsysRoleDeptService tsysRoleDeptService;@Autowiredprivate TsysDeptService tsysDeptService;/**
    *
    部门与数据表映射表的表名*/public final String MAPPING_TABLE = "DATA_MAPPING";/**
    *
    @param tableName 表名* @param pkNmae 主键名* @param isPrivate 是否只获取私有* @param subDept 是否拥有子部门数据权限* @return*/public String getDataSql(String tableName, String pkNmae,Boolean isPrivate, Boolean subDept) {// 校验参数checkParam(tableName, pkNmae, isPrivate, subDept);// 判断当前表是否开启数据权限if (!isNeedPermissions(tableName)) {return null;}// 获取当前用户TsysUserEntity user = ShiroUtils.getUserEntity();// 获取部门数据所需要的sqlString deptSql = getFilterSql(user, subDept);StringBuilder dataSql = new StringBuilder();dataSql.append("( SELECT DISTINCT S.* FROM ").append(tableName)
    .append(" S LEFT JOIN ").append(MAPPING_TABLE)
    .append(" T ON S.").append(pkNmae).append
    (" = T.T_ID AND T.TABLE_NAME= ").
    append("'").append(tableName)
    .append("'");
    if
    (isPrivate) {// 只获取私有数据dataSql.append(" WHERE (T.U_ID = ").append("'").
    append(user.getEmId()).append("'")
    .append(" AND (T.D_ID='' OR T.D_ID IS NULL))");} else {// 正常数据:私有数据+部门数据+公开数据dataSql.append(" WHERE T.D_ID IN ").append(deptSql).
    append(" OR (T.U_ID = ").append("'")
    .append(user.getEmId()).append("'").
    append(" AND (T.D_ID='' OR T.D_ID IS NULL))")
    .append(" OR ((T.D_ID='' OR T.D_ID IS NULL) " +"AND (T.U_ID='' OR T.U_ID IS NULL))");}
    dataSql.append(")");
    return
    dataSql.toString();}/**
    *
    判断当前表是否开启数据权限*
    *
    @param tableName
    *
    @return*/private Boolean isNeedPermissions(String tableName) {// TODO 这里可以通过表名查询配置或者表来判断改表是否开启了数据权限return true;}/**
    *
    获取部门数据情况下的过滤条件SQL
    *
    *
    @param user
    *
    @param subDept
    */
    private String getFilterSql(TsysUserEntity user, Boolean subDept) {// 部门ID列表Set deptIdList = new HashSet<>();// 用户角色对应的部门ID列表List roleIdList = tsysUserRoleService.
    queryRoleIdList(user.getEmId());
    if
    (roleIdList.size() > 0) {
    List userDeptIdList = tsysRoleDeptService
    .queryDeptIdList(roleIdList.toArray(newString[roleIdList.size()]));deptIdList.addAll(userDeptIdList);}// 用户子部门ID列表if (subDept) {
    List subDeptIdList = tsysDeptService.
    getSubDeptIdList(user.getEmDeptId());deptIdList.addAll(subDeptIdList);}
    List result = deptIdList.stream().map(i -> {return "'" + i + "'";}).collect(Collectors.toList());StringBuilder sqlFilter = new StringBuilder();sqlFilter.append("(").append(StringUtils.
    join(result, ",")).append(")");
    return
    sqlFilter.toString();}/**
    *
    参数校验*
    *
    @param tableName
    *
    @param pkNmae
    *
    @param isPrivate
    *
    @param subDept
    */
    private void checkParam(String tableName, String pkNmae,Boolean isPrivate, Boolean subDept) {//TODO 进行sql注入的校验if (StringUtils.isBlank(tableName) ||
    StringUtils.isBlank(pkNmae) ||null == isPrivate || null == subDept) {throw new XcrmsException("数据权限-缺少参数");}
    }
    }

    测试

    当前系统使用shiro做的权限,角色分成两种类型,一种是功能角色,一种是数据角色。功能角色与菜单按钮挂钩,数据角色与部门挂钩。接下来用PostMan接口测试方式来测试获取到的sql。

    只获取私有数据

    @Autowired(required = true)private DataSqlFilter dataSqlFilter;/**
    * test
    *
    *
    @param id
    *
    @return*/@GetMapping("/getDataSql")public Result getDataSql() {
    String dataSql = dataSqlFilter.
    getDataSql("PRODUCT", "P_ID", Boolean.TRUE, Boolean.FALSE);System.out.println(dataSql);
    return
    ResultUtil.success(dataSql);

    }

    结果用Navicat处理一下:

    c3178ef656be1cc1132ccb2477e9f0e3.png

    获取普通数据所谓普通数据就是用户正常能看见的数据:私有数据+部门数据+公开数据。将参数isPrivate设置为false即可

    @Autowired(required = true)private DataSqlFilter dataSqlFilter;/**
    * test
    *
    *
    @param id
    *
    @return*/@GetMapping("/getDataSql")public Result getDataSql() {
    String dataSql = dataSqlFilter.getDataSql
    ("PRODUCT", "P_ID", Boolean.FALSE, Boolean.FALSE);System.out.println(dataSql);
    return
    ResultUtil.success(dataSql);}

    结果用Navicat处理一下:77917866120d3a48ed13fc754ba2700b.png

    实际应用

    查询

    业务开发人员在查询是只需要调用这个方法获取到sql后,然后作为参数传入DAO层,在mybatis的xml文件中拼接即可(图片中的${dataSql}应为#{dataSql}),如下:a1fff91b30d2cd82421bc2a808e72a6e.png

    新增

    新增业务数据时,业务需要知道这个数据时那种数据类型,然后新增数据后,需要新增一条映射记录。提供过滤sql的类中可以提供统一的新增映射数据的方法。还没写,大概如下:

    /**
    *
    新增映射数据*
    *
    @param pk_value 数据表数据主键值* @param tableName 数据表表名* @param type 数据类型 0 私有 1 公开 2 部门*/public void addMapping(String pk_value,String tableName, Integer type) {// TODO 可以通过shiro获取到当前登录的用户,
    //
    然后获取到用户的部门,然后根据type来新增映射关系}

    修改

    若只是修改数据,则不关映射表的事。

    删除

    删除时需要注意,因为某条数据可能属于多个部门或者多个个人,那么当删除掉这条数据后,那么映射表中就存在多条T_ID相同和TABLE_NAME相同的数据,删除的时候应该通过T_ID和TABLE_NAME来删除映射表中的所有数据。

    修改数据的私有,公开,部门属性

    即修改映射表,按道理说,一般只会存在数据的所有人能修改,但是以防万一,业务开发人员需要判断当前数据的U_ID是否与当前用户的用户ID一致,不一致不能修改。当然,公开数据时不需要进行这一步校验的。以下修改方法都可以在DataSqlFilter类中统一提供

    私有改为部门

    即用户将私有数据分享给指定的部门

    修改方式:修改映射表中的D_ID为用户指定的部门ID

    私有改为公开

    即用户将私有数据全部公开

    修改方式:置空映射表中的U_ID和D_ID

    部门改为公开

    即将部门所拥有的数据公开

    修改方式:置空映射表中的U_ID和D_ID

    其他变更

    其他变更只要对照上面那张数据类型表即可进行修改。

    总结

    有人可能会说为什么不在原来的业务表上面加上部门ID和用户ID,从而不用映射表?

    但是这样会有一些问题,一是实际开发过程中,往往由于需求的变化,很难确定哪些表需要加部门ID和用户ID。二是这样无法满足一些特殊需求,比如:个人数据分享出去给其他人或者部门,单条数据属于多个部门。

    总结下来用以上方案来控制数据权限的优缺点如下

    优点:

    1.统一提供过滤sql,维护映射表,修改数据类型的方法,而且不用修改业务数据表,对原来的代码入侵最小化。

    2.不论是单表查询还是多表都能支持。

    3.比较灵活,针对不同需求,可以灵活调整过滤sql

    缺点:

    1.因为在对原表进行过滤时需要连接映射表,假如是多表联查,每张表都要连接映射表,可能对查询性能有影响。

    2.因为每条业务数据都会对应一条映射数据,那么意味着映射表将会有很多数据,在过滤的时候会影响性能,当然这里可以用分模块设计多个映射表的方法来解决。

    以上只是一个设计思路,还没用于实际项目,如有不足,欢迎斧正,谢谢。

    ————————————————

    版权声明:本文为CSDN博主「_飞飞飞飞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/qq_38846242/article/details/86529896

    ec09a6956dd1850f118747557695e078.png

    展开全文
  • 本篇以笔者做过的一个权限管理平台为例,讲解下权限管理的设计思路。项目背景本次是为培训机构搭建一套信息化系统,包括一个权限管理平台、以及5个业务系统。这里就不对业务系统做一一的描述了。其中权限管理平台由...
    本篇以笔者做过的一个权限管理平台为例,讲解下权限管理的设计思路。

    ede470eac9c53a01e34b162a32132205.png

    项目背景

    本次是为培训机构搭建一套信息化系统,包括一个权限管理平台、以及5个业务系统。这里就不对业务系统做一一的描述了。

    其中权限管理平台由总部运营人员进行管理与维护。此平台的主要目标是:各个业务系统的所有功能和数据进行统一权限配置。

    机构与业务梳理

    对客户实际组织架构和业务情况进行了解梳理,总结如下:

    • 其中运营部与教研部归总部管理,运营部管理公司所有员工的账户与权限分配。其下又分为4个大机构。
    • 4大机构其下又分为多个小机构,每个机构又是独立存在的。
    • 每个小机构又有多个业务部门,每个部门负责管理与维护不同的业务系统。
    • 同一个员工可能在不同的机构担任不同的角色。

    名词解析

    该平台的权限设计是基于RBAC模式进行设计的。

    RBAC(Role-Based Access Control)基于角色的访问控制。这是从传统的权限模型基础上,改进而来并且相当成熟的权限模型。这里强调三个要素:用户、角色、权限。用户与角色是多对多关系,角色与权限是多对多关系。

    关键元素:

    • 用户(员工):成功认证并登录系统的操作员(主体:who);
    • 权限:访问资源的许可(how);
    • 角色:权限的集合体;
    • 业务系统:每个独立业务系统,包括各业务系统中的菜单、操作按钮等(what)

    如图所示:

    3914400f8c3a4dfe1d660e9d651d66ba.png

    大体思路

    • 组织机构与员工关联;
    • 业务平台与资源权限关联;
    • 角色与业务平台关联,维护该角色对应的资源列表;
    • 角色权限与系统角色关联;

    产品具体设计说明

    统一权限管理平台主要包含了以下4个功能模块:员工管理、角色管理、校区管理、安全设置、操作日志。其中员工管理、角色管理、机构管理三个模块相互联系。如图所示。

    f5d140c8856025ec7f2efc1d4949777b.png

    机构管理

    机构管理是对整个集团公司的员工所属机构进行维护、更新的管理。机构的最高层次:如“XX总部”不可删除、可以编辑,该机构由超级管理员进行维护。根据业务梳理,其中4个大机构不具备实际意义,只是方便与各个机构的选择。因此4个大机构直接由开发设置。

    具体设计如下:

    机构列表包括:机构名称、上级机构、机构位置、CPS定位、是否启用、操作(编辑)

    4253380d9e12addfe159257327a38830.png

    创建机构:弹窗录入:机构名称、选择上级机构、机构位置、GPS定位(方便员工进行考勤)、是否启用。

    ce3826a7cf7da14d8d7382d03d2501eb.png

    角色管理

    角色往往基于业务需求而在系统内设定好的标签,每个角色对应明确的业务系统权限,是众由多最小权限颗粒的组成。通过把权限给这个角色,再把角色给账号,从而实现账号的权限,因此它承担了一个桥梁的作用。

    根据对业务的梳理,不同角色只能操作其对应的业务平台,由开发将业务平台直接写死,新增角色时,将角色与平台进行挂钩,方便对角色进行该业务平台进行权限分配

    bf9dae744449ebf066dd0b5e20d719e6.png

    具体设计如下:

    新建角色:角色名称,所属平台;

    cefadefadc53ec0e2b4136e4f1549e8f.png

    角色列表包括:角色名称、所属平台、创建人、创建时间、操作(编辑、删除、权限分配)

    c4db56bb46e71d573f90ffebe7248612.png

    角色的权限分配:对应跳转到对应平台权限分配界面,即该业务平台的资源(菜单/子菜单/按钮/字段),目前已存在5个业务平台,不同业务具备不同的资源;下图只是其中一个业务平台的部分权限。

    871f434d13c994e313c290b8835490b9.png

    删除:弹窗提示:“删除该角色后,员工所属角色会自动移除,是否继续?”。

    员工管理

    员工归属不同的机构,是各个业务系统的具体操作者。员工按组织架构新建/导入在对应的组织上,一般是在机构对应的部门(一级部门–二级部门)下。根据公司实际情况直接将员工归属于各个不同的机构。

    员工可以在多个不同机构担任不同的角色、所以它与机构、角色之间的关系都是1对n的关系。员工的权限取决于他在不同的机构担任角色的集合,即员工权限=同一机构所属角色权限集合(注:员工根据角色所属平台、操作不同的业务系统)。

    e890033906ee82f1384f7e789db6562f.png

    具体设计如下:

    员工列表、查询:用户列表页展示姓名(员工实际姓名)、手机(员工唯一登录账号)、状态等有价值的信息。同时具备编辑、启用、授权、重置密码、离职功能。

    7d4a49d0dc8201dcab4a2e355d39ed8e.png

    员工新增、编辑、批量导入:本项目中,员工的新增均是通过统一权限管理平台进行,并并分配各业务系统角色权限。其中手机号码是员工唯一登录业务系统的凭证。

    4bf34bf1e71be6edb4d428a863373068.png

    离职:当出现用户离职时,可以将用户禁用,不可登录系统,防止业务数据流失。

    重置密码:当用户多少输入密码错误时或忘记密角色码时,这时可以进行重置密码,恢复到默认密码。

    授权:点击授权,由于同一个员工在不同机构中拥有的角色是不一致的。所以需要对员工的不同机构进行单独角色配置,呈一一对应的关系。利润员工A在机构A拥有角色A、角色C,在机构B拥有其他角色等

    d4628ed4d104187a8b6a85f66f93596a.png

    908742b16396dd03113d90561ad2af0c.png

    安全设置

    此平台默认一个超级管理员角色,这个账号不可删除,但可以进行密码于密保手机修改(由开发人员创建)

    该超级管理员角色主要对该平台创建角色、与机构并进行权限分配

    操作日志

    操作日志是对用户操作的记录,记录有操作IP、操作内容和操作时间等。

    0e202e25510bb72898bdc9351e83918d.png

    数据权限梳理

    对各角色的数据权限进行梳理,一些员工若存在所分配的角色权限之外,还需要一些权限需时。

    可以与开发沟通,通过代码写死或者约定一定的规则,用角色编码或岗位编码实现;

    通过在角色管理设置特殊角色,进行单独角色权限分配,但不在角色管理中显示;

    平台上线试运行

    平台上线试运行期间,协助客户对实际业务的新情况调整权限配置,让客户运营人员逐渐熟悉权限配置规则。

    在使用过程中,对客户提出一些新的特殊权限的需求进行评估,根据对现有权限框架的影响再决定是否变更。

    以上就是一只产品汪对“权限管理平台”的设计思路和对应的实现方法,欢迎和同行一起交流产品设计。

    展开全文
  • 一. 权限系统1.1 系统定义用户管理...每个角色对应明确的系统权限,是众多最小权限颗粒的组成权限管理:基于角色的访问权限控制(RBAC)模型,赋予用户的权限管理,可以分为两大类型:​功能权限: 功能权限是系统执行权...
  • 产品权限设计——首先区分功能权限和数据权限权限管理系统是2B类产品必不可少的产品功能,牵涉整个产品的使用。权限管理功能不同的客户组织架构是完全不同的,功能的复用性很低,如何设计出高质量的权限管理功能是...
  • 我们一般说【权限】的时候是在说功能权限和数据权限。功能权限指用户登录系统后能看到什么模块,能看到哪些页面,而数据权限指的是用户在某个模块里能看到几条数据,能看到哪些数据。以下分别描述一下我对功能权限和...
  • 首先,什么是数据中台,由于每个企业每种项目对中台的定义不同,这里仅仅给一个概念:数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。把数据统一之后,会形成标准数据,再...
  • 1、数据权限概述1.1、什么是数据权限数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:符合某条件的用户只能看到该条件下对应的数据资源。那么最简单的数据权限大概就是:用户只能看到自己的数据...
  • 本文的目的是帮助大家理清楚权限设计中的一些基本概念,提供常用的权限系统设计思路。首先,我们抛出一个案例,读者可以想一想如果自己来设计权限系统,如何满足这个需求?需求描述:在一个大学里,有许多人。学生...
  • 上一篇给大家介绍了“功能权限”设计,本篇主要介绍“数据权限设计,做B端用户中心近半年,从一头雾水到产品上线,总结出来一些经验,希望能够给到大家一些帮助。“功能权限”控制的是用户登录系统后能看到哪些...
  • 本文为我们介绍了功能权限和数据权限的不同点、以及不同部分中的要点与注意事项。做2B的系统总是不可回避的遇上权限问题,他不是核心业务却又必不可少,而且总是牵一发而动全身,更要命的是不同客户组织架构完全不同...
  • 本文为我们介绍了功能权限和数据权限的不同点、以及不同部分中的要点与注意事项。做2B的系统总是不可回避的遇上权限问题,他不是核心业务却又必不可少,而且总是牵一发而动全身,更要命的是不同客户组织架构完全不同...
  • 编辑导语:任何系统/...01 超简版本-用户/权限模型用户直接与权限映射,这种设计的优势在于简洁直观,适合用户数量不多,功能较为简单的系统,它的劣势也是非常的明显当用户量增多时,维护成本较高,可扩展性差。...
  • 1、数据权限概述1.1 什么是数据权限? 数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:`只有符合条件的用户才能看到该条件下对应的数据资源`.举个简单的例子: 本组织的销售人员只能看见本组织...
  • 权限系统模块对于互联网产品是一个非常重要的功能,可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用权限控制有哪些模型ACLRBAC 基于角色的访问控制从上图我们可以看出,ACL是用户和权限直接关系的,...
  • 小王想只要自己设计一个账号系统和权限系统,把权限作为方法关联的账号上,最后再设计一个类似论坛的交流模块,让公司人员把相关数据按照不同格式发布自己的工作信息,同时设计统计功能,让老板可以清晰看到员工的...
  • 如果缺乏有效的数据整体架构设计或者部分能力缺失,会导致业务层难以直接利用大数据大数据,大数据和业务产生了巨大的鸿沟,这道鸿沟的出现导致企业在使用大数据的过程中出现数据不可知、需求难实现、数据难共享等一...
  • 作者:谢略链接:...二,初步分析用户和角色说到权限管理,首先应该想到,当然要设计一个用户表,一个权限表。这样就决定了一个人有什么样的权限。做着做着就会发现这样设计太过繁琐,如果公...
  • 笔者近期完成了一家小型商业银行的线上信贷业务智能化风控与数据管理平台项目的一期建设,在此给同业分享一下平台建设的一些设计思路。对于一家典型的小型传统商业银行,在其线上信贷业务风控与数据管理平台建设的...
  • 好处就是如果用户全体特别大,分配权限就能累死人,基于RBAC更适合企业应用得权限控制 2. RBAC得四大模型 RBAC根据这套模型功能的复杂程度不同,由简单到复杂又可以分为RBAC-0、RBAC-1、RBAC-2、RBAC-3四个层级。 ...
  • 求J2ee数据权限设计思路,基本要求: 部门经理可以查看该部门下的所有数据对象(比如销售订单),销售人员只可以查看自己的销售订单或者查看其他人的销售订单(通过权限设置),请问该怎么设计?求高人帮忙.
  • 权限管理系统设计思路使用 角色 + 资源(菜单和菜单对应页面上的按钮)+ 授权的方式。数据库表设计如下:1. 定义角色与用户用户与角色可以是 一对一的关系,也可以是一对多的关系用户表 SysUserSysUser(用户表)-------...
  • 比如,省市区机构关系。 中国为000河南为001河北为002那么用户表,比如河南用户存机构号001另外存,000|001这样拼接的字符串,以便判断,是某个机构的下级,但是只能用like判断,性能不好,经历了这么多项目就见过这...
  • 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一般在大公司我们可能有专门的DBA, 这时我们可以不要考虑数据库的搭建, 但是也要能够读懂或者了解DBA的设计思路方便我们在程序开发的时候不会出现问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 602
精华内容 240
关键字:

数据权限设计思路