Dolores企業(yè)通訊解決方案
Dolores
Dolores試圖成為一套完整的企業(yè)通信解決方案,一個完整的企業(yè)溝通工具(以下簡稱企業(yè)IM)至少需要支持以下幾個功能:IM消息服務、組織架構管理、工作流集成
IM消息服務
實時消息這一塊有很多開源的解決方案比如XMPP,但是企業(yè)通信對IM這塊的可靠性要求很高,所以目前我們打算使用比較成熟的云服務,后期如果時間比較充裕,考慮開發(fā)自己的IM服務器。在對比了市場上數(shù)十家IM云服務廠商以后,我們決定選擇環(huán)信來為Dolores提供消息服務。
組織架構
企業(yè)通訊錄可以說是企業(yè)溝通中最重的業(yè)務之一,能夠提供員工各種服務的認證,獲取員工的聯(lián)系方式等等。
組織架構-Server
服務端主要包括以下功能:
支持管理人員(例如HR)對部門和員工進行增刪改查
支持部門和員工自定義排序,自定義元信息存儲
權限管理
員工通訊錄視圖 (員工根據(jù)自己的權限生成通訊錄)
通訊錄增量更新 (鑒于移動端特殊的網(wǎng)絡環(huán)境和設備,通訊錄應該支持差量更新)
集成 IM 用戶系統(tǒng)
在這里我們主要討論以下兩個問題:
權限管理
隨著企業(yè)逐漸的發(fā)展,團隊壯大為了更有效的溝通,以及保護公司內(nèi)部的一些商業(yè)信息不被泄漏,我們應該為通訊錄添加權限管理。
基于Role-based access control(RBAC)的權限管理模型
為了介紹此權限管理模型,我們先解釋一下基本概念
角色:通常是指企業(yè)中某一個工作崗位,這個崗位具有特定的權利和職責。被賦予此角色的員工,將獲得這種權利與職責
權限:被賦予訪問實體的權利。在本項目中是指訪問部門和訪問某一個或者某一類員工的權利
用戶-角色分配(User-Role Assignment URA):為某個用戶指定一個或者多個角色,此員工將獲得這些角色所具有權利的集合
角色-權限分配(Role-Permission Assignment RPA):將權限分配給角色,一個角色可以包含多個權利。在本項目中是指多個訪問部門和訪問員工的權限
在用戶和權限之間引入角色中介,將用戶與權限的直接關系弱化為間接關系。
|ˉˉˉˉˉˉ| |ˉˉˉˉˉˉˉ| |ˉˉˉˉˉˉˉˉˉˉˉˉˉ| | User |---URA---> | Role |<---RPA---| Permission | |______| |_______| |_____________|
以角色為中介,首先創(chuàng)建訪問每個部門和員工的訪問權限,然后創(chuàng)建不同的角色,根據(jù)這些角色的職責不同分配不同的權限,建立角色-權限的關系以后,不同的角色將會有不同的權限。根據(jù)員工不同的崗位,將對應的角色分配給他們,建立用戶-角色關系,這就是RBAC的主要思想。
一個員工可以用戶多個角色,一個角色可以用于多個訪問權限。RBAC 極大的簡化了員工的授權管理。
由于企業(yè)的部門和員工數(shù)量很多,在創(chuàng)建權限時管理員不可能去設置每一個權限可以訪問的每一個部門和每一個員工。所以本項目將功能和指責類似的部門和員工看作是同一類型,在創(chuàng)建部門和員工的時候為每一個部門和員工分配固有屬性type,管理員在設置權限規(guī)則的時候只需要指定可訪問的部門類型和員工即可。
增量更新
鑒于移動終端計算資源有限,如網(wǎng)絡,存儲,電量等,所以通訊錄的更新技術應該保證盡量少的資源。另外由于通訊錄的特殊性,通訊錄的變化需要能實時通知到受影響的在線員工。
基于版本號與變更日志的增量更新模型
客戶端第一次登陸系統(tǒng)以后,我們根據(jù)當前登錄角色生成對應的通訊錄視圖,并以當前時間戳作為版本號,返回給客戶端??蛻舳撕罄m(xù)通過此版本號增量更新通訊錄。
版本號
版本號有兩種:一是客戶端當前通訊錄版本 c-version, 二是服務端通訊錄每一次變化時的版本號s-version
變更日志
在管理員修改權限規(guī)則,或者修改某個崗位的訪問規(guī)則時會影響大面積員工的通訊錄視圖,此時如果用增量更新會導致服務器流量異常,因此在這2中情況會清空原來的變更日志并且要求客戶端進行一次全量更新。
如果管理員新增了員工,服務端會根據(jù)被修改的員工或者部門type, 反推出所有受影響的員工,然后生成一條變更日志, 例如:
{
"content" : [
{
"cn" : "Lucy.Liu",
"id" : "b4vlfg91scgi1dcju8v0",
"title" : "市場運營負責人",
"email" : [
"[email protected]"
],
"priority" : "101111",
"name" : "劉小飛",
"telephoneNumber" : "18888888888"
}
],
"createTimestamp" : "20170614063303Z",
"category" : "member",
"action" : "add"
}
客戶端在請求增量更新的時候,通過當前登陸ID與版本號,可查找出所有與自己相關的變更日志,然后在客戶端數(shù)據(jù)庫中應用這些變更,即可完成同步。
組織架構-Client
由于現(xiàn)在員工辦公設備的多樣性,客戶端要根據(jù)自己公司的情況,覆蓋的足夠完整,常見的平臺有 iOS Android windowsmac linux , 對于后三個平臺可以用 Web APP 來覆蓋,iOS&Android 用原生的app來提升用戶體驗。
客戶端App主要包括以下功能:
會話列表
優(yōu)秀的聊天界面,歷史記錄
組織機構全量/增量更新
員工個人資料展示
客戶端數(shù)據(jù)庫設計
IM數(shù)據(jù)庫設計
當前版本使用環(huán)信SDK,暫不討論(TODO)
組織架構數(shù)據(jù)庫設計
表設計
客戶端組織架構較服務端簡單,不關聯(lián)用戶Role,客戶端本地存儲Staff(員工)和Department(部門)信息:
一個部門可以包含相關子部門和部門員工。該部門員工和部門在視圖上處于同級關系。
員工隸屬于部門,同一員工可以存在于多個部門。
員工角色用title來表示。
用戶在登錄客戶端成功后,會根據(jù)該用戶信息創(chuàng)建用戶對應的數(shù)據(jù)庫文件,用戶表(User)保存用戶相關信息,關聯(lián)該用戶staff信息。
客戶端組織架構同服務端邏輯。
工作流集成
(TODO)
如何使用Dolores
本項目現(xiàn)在已經(jīng)完成了第一個測試版本,本小節(jié)將指導您如何安裝使用。
后端數(shù)據(jù)庫
鑒于通訊錄對數(shù)據(jù)庫操作的特點多度少寫,以及部門之間的樹狀關系,我們選擇LDAP協(xié)議來存取數(shù)據(jù)。
我們有獨立的repo來幫助您完成數(shù)據(jù)庫的安裝與初始化。請移步這里
組織架構管理
Dolores 初始版本使用Golang實現(xiàn),大家既可以下載各個平臺的可執(zhí)行包,也可以安裝Go語言的開發(fā)環(huán)境自己編譯。
我們有獨立的repo來幫助您,運行后端服務。請移步這里
客戶端
我們現(xiàn)在有提供一個iOS版的Demo。請移步這里
Done
如果您順利的完成以上三步,訪問 http://localhost:3280 (端口號根據(jù)自己的配置,可能會有差異),使用 username: admin, password: dolores 登陸后端管理頁面,添加權限規(guī)則,添加角色,添加員工、部門,然后使用iOS客戶端登陸,就可以愉快的開始聊天啦~
對每個repo做一個簡單的介紹
Dolores: 項目簡介, 整個項目的架構, 數(shù)據(jù)庫設計等等 你想了解的一切都可以在這里看到
dolores-ios: iOS版demo,可以聊天查看組織架構
dolores-android: 哈哈 還沒有,當然我們歡迎各路安卓大牛貢獻安卓版demo
organization: 組織架構的創(chuàng)建管理、更新、審計等等核心的東西都在這里啦
dolores-server: 為客戶端提供restfull api 與環(huán)信服務器集成
dolores-admin: 后臺管理網(wǎng)站,用于管理部門員工。一個基于React的webapp還很基礎,歡迎各位大牛pr.
dolores-ldap-init: 后臺數(shù)據(jù)庫的初始化工具,詳情可以查看readme
easemob-resty:對環(huán)信rest api的封裝,讓調(diào)用環(huán)信api更簡單
dolores-avatar:生成類似釘釘那樣的默認頭像
