?????? 【by yhliu】
【業(yè)務(wù)領(lǐng)域】 ???
?????? 互聯(lián)網(wǎng)產(chǎn)品要做好服務(wù),必須要有一個強大完善靈活的運營支撐系統(tǒng)。這個線上的系統(tǒng)一定會對應(yīng)到一個龐雜的線下組織-運營團隊。對于一個大型互聯(lián)網(wǎng)公司,可能通過組織結(jié)構(gòu)可以識別出大家的運營分工;也可能對于一些運營人員有超出組織結(jié)構(gòu)外的運營智能。對于可運營的數(shù)據(jù),可能根據(jù)所服務(wù)的地域(北京/上海等)、所服務(wù)對象的品類(男裝/女裝 等)、也可能是不同職權(quán)(大區(qū)經(jīng)理/區(qū)域經(jīng)理 等),也可能是某一對象的特別實例;對于功能 基本按照大家不同的工作職能分工來確定。
【解決方案】 ?
??????? 基于GBAC(GROUP-Based Access Control)的權(quán)限管理控制,用戶通過角色與權(quán)限進行關(guān)聯(lián),一個用戶可以擁有若干角色,每一個角色擁有若干權(quán)限。這樣,就構(gòu)造成“用戶-角色-權(quán)限”的授權(quán)模型,在這種模型中,用戶與角色之間,角色與權(quán)限之間,一般者是多對多的關(guān)系。其對應(yīng)關(guān)系如下:

這樣做的好處:
·不同職責(zé)的人員,對于系統(tǒng)操作的權(quán)限應(yīng)該是不同的。優(yōu)秀的業(yè)務(wù)系統(tǒng),這是最基本的功能。
·可以對“組”進行權(quán)限分配。對于一個大企業(yè)的業(yè)務(wù)系統(tǒng)來說,如果要求管理員為其下員工逐一分配系統(tǒng)操作權(quán)限的話,是件耗時且不夠方便的事情。所以,系統(tǒng)中就提出了對“組”進行操作的概念,將權(quán)限一致的人員編入同一組,然后對該組進行權(quán)限分配。
·權(quán)限管理系統(tǒng)應(yīng)該是可擴展的。它應(yīng)該可以加入到任何帶有權(quán)限管理功能的系統(tǒng)中。就像是組件一樣的可以被不斷的重用,而不是每開發(fā)一套管理系統(tǒng),就要針對權(quán)限管理部分進行重新開發(fā)。
·滿足業(yè)務(wù)系統(tǒng)中的功能權(quán)限。傳統(tǒng)業(yè)務(wù)系統(tǒng)中,存在著兩種權(quán)限管理,其一是功能權(quán)限的管理,而另外一種則是資源權(quán)限的管理,在不同系統(tǒng)之間,功能權(quán)限是可以重用的,而資源權(quán)限則不能。
涉及到的表
具體sql請參考相關(guān)文檔
實體表
user(用戶表關(guān)系表或從表中對應(yīng)id->userId)
role(角色表id->roleId)
resource(資源表對應(yīng)一條記錄對應(yīng)頁面上面的一項菜單id->resourceId)
model(模型表一條記錄對應(yīng)一張實體表id->model)
data_model(數(shù)據(jù)權(quán)限modelid->dataId)
datagroup(數(shù)據(jù)組datagroup->Id)
實體關(guān)系表:
role_user(用戶—角色對應(yīng)關(guān)聯(lián)表)
role_resource(角色—資源關(guān)聯(lián)表,什么樣的角色對應(yīng)那些菜單功能)
user_date(用戶數(shù)據(jù)權(quán)限,如對某一地區(qū))
datagroup_data(數(shù)據(jù)組和數(shù)據(jù)的對應(yīng)關(guān)系)
從表
resource從表:
resource_grid(資源grid表)
resource_action(資源操作表)
1.用戶-角色—資源權(quán)限操作的說明:
user表存儲用戶(管理人員)的基本信息 這里稱之為【用戶組】
role角色表 【角色組】或者【管理組】
resource_action操作權(quán)限
增 、刪 、改 、查【權(quán)限組】
這三個表之間的關(guān)系是多對多的,一個權(quán)限可能同時屬于多個角色,一個角色中也可能同時包含多個權(quán)限。同樣的道理,一個用戶只有一個角色,一個角色中可能包含多個用戶

用戶-角色-資源權(quán)限表之間的關(guān)系:

資源部分各表關(guān)系(data_Model第二部分會說明):

資源表用途主要是作為后臺管理系統(tǒng)頁面左側(cè)菜單和點擊菜單之后右側(cè)展示出的相應(yīng)的數(shù)據(jù)及操作權(quán)限:
例如:
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 '學(xué)校代碼',
`startShcoolYear`int(11) unsigned DEFAULT '0' COMMENT '誕生于',
`endShcoolYear`int(11) unsigned DEFAULT '0' COMMENT '結(jié)束年份',
`classState`tinyint(4) unsigned DEFAULT '0' COMMENT '班級狀態(tài)',
`classOrder`int(11) DEFAULT '0',
`status`tinyint(4) NOT NULL COMMENT '狀態(tài)',
`creator`varchar(64) DEFAULT NULL COMMENT '創(chuàng)建人',
`createDate`bigint(20) DEFAULT NULL COMMENT '創(chuàng)建時間',
`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 '按照規(guī)則生成的別名',
`schoolYear`int(11) DEFAULT NULL COMMENT '學(xué)年',
PRIMARYKEY (`id`),
KEY`classCode` (`classCode`) USING HASH,
) ENGINE=InnoDBAUTO_INCREMENT=12467 DEFAULT CHARSET=utf8 COMMENT='班級信息管理|班級信息管理|基礎(chǔ)數(shù)據(jù)管理|CreateBaseDomain\r\n班級信息管理model'
表中數(shù)據(jù):

model班級表的模型bd_classes
resource表

說明url指訪問路徑
parentId指上級資源(菜單)
numb菜單標(biāo)示(相當(dāng)于唯一標(biāo)識)
longNum如數(shù)據(jù)中的班級信息管理的菜單層次應(yīng)為 基礎(chǔ)數(shù)據(jù)管理-班級信息管理
modelId外鍵model表的id
resource_grid
resource_grid

說明:
resource_grid主要作用是動態(tài)配置頁面數(shù)據(jù)展示的表格
orderNum表示在表格的第幾列
width:列的寬度
formater調(diào)用頁面js對某一列數(shù)據(jù)的處理
resource_action對于數(shù)據(jù)的操作權(quán)限

role

role_resource

user

role_user

2.用戶-數(shù)據(jù)模型|數(shù)據(jù)組-數(shù)據(jù)權(quán)限
user用戶表
data_model數(shù)據(jù)模型表
datagrounp數(shù)據(jù)組表
data表數(shù)據(jù)表

數(shù)據(jù)組與數(shù)據(jù)模型之間關(guān)系
通過數(shù)據(jù)模型(data_model)和數(shù)據(jù)組(datagroup)分配用戶某一地區(qū)的數(shù)據(jù)權(quán)限(注data這里是地區(qū))
data_model說明:


user_data
