【by yhliu】
【业务领域】
互联网产品要做好服务,必须要有一个强大完善灵活的运营支撑系统。这个线上的系统一定会对应到一个庞杂的线下组织-运营团队。对于一个大型互联网公司,可能通过组织结构可以识别出大家的运营分工;也可能对于一些运营人员有超出组织结构外的运营智能。对于可运营的数据,可能根据所服务的地域(北京/上海等)、所服务对象的品类(男装/女装 等)、也可能是不同职权(大区经理/区域经理 等),也可能是某一对象的特别实例;对于功能 基本按照大家不同的工作职能分工来确定。
【解决方案】
基于GBAC(GROUP-Based Access Control)的权限管理控制,用户通过角色与权限进行关联,一个用户可以拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型,在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。其对应关系如下:
这样做的好处:
·不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。
·可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。
·权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。
·满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。
涉及到的表
具体sql请参考相关文档
实体表
user(用户表关系表或从表中对应id->userId)
role(角色表id->roleId)
resource(资源表对应一条记录对应页面上面的一项菜单id->resourceId)
model(模型表一条记录对应一张实体表id->model)
data_model(数据权限modelid->dataId)
datagroup(数据组datagroup->Id)
实体关系表:
role_user(用户—角色对应关联表)
role_resource(角色—资源关联表,什么样的角色对应那些菜单功能)
user_date(用户数据权限,如对某一地区)
datagroup_data(数据组和数据的对应关系)
从表
resource从表:
resource_grid(资源grid表)
resource_action(资源操作表)
1.用户-角色—资源权限操作的说明:
user表存储用户(管理人员)的基本信息 这里称之为【用户组】
role角色表 【角色组】或者【管理组】
resource_action操作权限
增 、删 、改 、查【权限组】
这三个表之间的关系是多对多的,一个权限可能同时属于多个角色,一个角色中也可能同时包含多个权限。同样的道理,一个用户只有一个角色,一个角色中可能包含多个用户
用户-角色-资源权限表之间的关系:
资源部分各表关系(data_Model第二部分会说明):
资源表用途主要是作为后台管理系统页面左侧菜单和点击菜单之后右侧展示出的相应的数据及操作权限:
例如:
CREATE TABLE`bd_classes` (
`id`bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`classCode`varchar(32) NOT NULL DEFAULT '' COMMENT 'code',
`customName`varchar(64) NOT NULL DEFAULT '' COMMENT '名称',
`schoolCode`varchar(64) NOT NULL DEFAULT '' COMMENT '学校代码',
`startShcoolYear`int(11) unsigned DEFAULT '0' COMMENT '诞生于',
`endShcoolYear`int(11) unsigned DEFAULT '0' COMMENT '结束年份',
`classState`tinyint(4) unsigned DEFAULT '0' COMMENT '班级状态',
`classOrder`int(11) DEFAULT '0',
`status`tinyint(4) NOT NULL COMMENT '状态',
`creator`varchar(64) DEFAULT NULL COMMENT '创建人',
`createDate`bigint(20) DEFAULT NULL COMMENT '创建时间',
`lastModifier`varchar(64) DEFAULT NULL COMMENT '修改人',
`lastModDate`bigint(20) DEFAULT NULL COMMENT '修改时间',
`history` varchar(128) DEFAULT NULL COMMENT '历史所在年级Id',
`gradeCode`varchar(64) DEFAULT NULL COMMENT '年级编号',
`weixinId`int(11) DEFAULT NULL COMMENT '微信的专用id',
`aliasName`varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '按照规则生成的别名',
`schoolYear`int(11) DEFAULT NULL COMMENT '学年',
PRIMARYKEY (`id`),
KEY`classCode` (`classCode`) USING HASH,
) ENGINE=InnoDBAUTO_INCREMENT=12467 DEFAULT CHARSET=utf8 COMMENT='班级信息管理|班级信息管理|基础数据管理|CreateBaseDomain\r\n班级信息管理model'
表中数据:
model班级表的模型bd_classes
resource表
说明url指访问路径
parentId指上级资源(菜单)
numb菜单标示(相当于唯一标识)
longNum如数据中的班级信息管理的菜单层次应为 基础数据管理-班级信息管理
modelId外键model表的id
resource_grid
resource_grid
说明:
resource_grid主要作用是动态配置页面数据展示的表格
orderNum表示在表格的第几列
width:列的宽度
formater调用页面js对某一列数据的处理
resource_action对于数据的操作权限
role
role_resource
user
role_user
2.用户-数据模型|数据组-数据权限
user用户表
data_model数据模型表
datagrounp数据组表
data表数据表
数据组与数据模型之间关系
通过数据模型(data_model)和数据组(datagroup)分配用户某一地区的数据权限(注data这里是地区)
data_model说明:
user_data