概述
授权中心用基于角色的访问控制思想(RBAC-Role Based Access Control)来实现各个业务系统的功能权限及数据权限控制。功能权限是指能否进入页面及使用页面上的操作。数据权限控制主要有组织,品类,项目三个维度。组织层级比较多,目前有一级单位(股份公司),二级单位(工程局及区域联采中心等),三级单位,四级单位,五级单位等。
关于组织
一个人属于某个组织,可以拥有多个组织的角色。需求明确指出不能采用切换组织的方式来做。要一次性查询角色组织的本级或本下级的相关数据。
组织的管理层级有一级单位(股份公司),二级单位(工程局及区域联采中心等),三级单位,四级单位,五级单位。
组织的机构性质有公司及区域联采中心。
后来金服又提出需要扩展是否法人单位及三证相关信息,这些信息仅仅是金服在用,没有复杂的业务逻辑。
关于品类:
品类有两大类,即物资类和分包类,其中物资类包括物资,设备,专业服务;分包类包括劳务分包,专业分包。每个一级品类又包括几十种二级品类。
目前的管控需求是控制到二级品类。二级品类上页面需要设置采购策略及映射商品类别。
关于用户:
用户主要有登录名,姓名,职位,手机号,用户身份等重要属性。整个平台的用户都存储在一张表中,用户身份包括采购商,供应商,供应商子帐号,总包方,分包方,劳务人员,平台管理员,共7种。这7种用户类型可以按业务规则进行组合,随意组合可能不具有意义。其中总包方,分包方,劳务人员主要是劳务使用。
用户分类
用户分为平台级,组织级,项目级三类。
1. 顾名思义,平台级用户所属组织为平台,主要是运营,客服,售后,开发团队相关的人员等等。比如给一个运营妹子分配一个八局的合规性检查人员的角色,数据权限为本下级,品类权限是物资,那么她就只能管理八局本下级物资相关的合同,订单,结算单等数据。
2.组织级用户主要是股份公司,二级单位(局级),三级单位(号码公司等),四级单位,五级单位等领导及业务人员(招投标,合同,订单,结算,合规性检查等等人员)。强调一下,这些公司可能是法人单位也可能不是,比如一些大的经理部也可能纳为五级单位。有一点必须遵守,项目不能添加到组织树中。
3.项目级用户,即项目现场的收货人员,进度检查人员,质量检查人员,安全检查人员等等。
关于角色:
角色主要有所属系统,所属组织,角色名称,角色类型等属性,可以设置功能权限。因为组织机构树层级比较多,各个组织的管理需求又各不相同。所以只能让各个组织自己去规划角色。但是我们要实现分级授权。比如平台可能看到几乎所有的权限(有些权限只能开发或运维同事使用),同时也要精确控制股份公司,二级单位(局级),三级单位,四级单位,五级单位的权限设置。
关于数据范围:
数据范围有平台级,股份公司级,(按组织查看)本级,(按组织查看)本上级,(按组织查看)本上级等。不同的业务有不同的管控需求,使用不同的数据范围控制。
比如模板管理使用本上级的数据范围控制。比如一局一分公司在招标过程中使用招标公告模板时,可能用户最想要的功能是先查看本级的招标公告模板,然后还可以查看上级的招标公告模板。
再比如柖标管理使用本下级的数据范围控制,同时还有创建人,采购经办人等特殊逻辑。
重要约定:
1. 授权中心要支持多系统授权。因此它的实现要尽量不要和具体系统的业务耦合,保证其单一性,可扩展性。
2. 功能点分为系统级,平台级,用户级。
a)系统级:比如授权中心的系统管理,菜单管理,组织迁移等只能由开发人员或运维人员使用。
b)平台级:比如供应商注册审核,准入信息变更,供应商管理,商城广告位管理,商城推荐管理等运营后台相关功能只能由运营团队,客服团队等使用的功能。
c)用户级:业务方的管理功能。不再区别是股份公司,二级单位,三级单位等层级,只需采用分级授权体系层层控制即可。比如有些功能只能由股份公司级使用,就只分配给他这一级就可以了。至于他要不要再分配到下级由他们自己控制。
3. 精确控制每一个组织的可见权限集,由此来实现分级授权体系。
4. 业务角色分为业务角色,功能角色两种。
a) 业务角色指业务系统中相关业务职位、权力的代表,比如采购经办人,采购员,采购经理,商务部经理,商务部业务人员,领导,合规性检查人员,进度管理人员,质量管理人员,安全管理人员,项目经理,财务,法务。
b)功能角色指业务系统中的各操作人员的权限集合。
5. 不允许同一个人有多个组织的功能角色,只能拥有同一个组织的多个功能角色。
6.如果一个人拥有某组织的系统管理员功能角色,就不能再拥有其它功能角色了。但是他可以拥有其它的业务角色。
7. 多个业务系统使用统一的登录页面。
8. 多个业务系统中的项目库,产品库,企业库(即组织机构,比如采购商,供应商,总承包,分包单位, 建设单位,设计单位,监理单位,*部门,施工企业等单位基本信息)使用一套表存储,不能每个业务系统自己搞。
9.组织权限设置需要有两个层级:组织级系统管理员,项目级系统管理员?
我感觉既然选择框架,用security比较好。可以和spring其它模块无缝接合,比如websocket stomp。
我感觉security,shiro中不应该有role授权,可以把role当成一个特殊的authority。security,shiro都整了两个概念(role, authority)反而增加了复杂度。
Spring Security 入门系列
http://www.spring4all.com/article/428
https://springcloud.cc/spring-security-zhcn.html
springBoot+springSecurity 数据库动态管理用户、角色、权限