電商后臺設計:權限設計

11 評論 28816 瀏覽 281 收藏 14 分鐘

文章結合具體業務場景對電商后臺設計中的系統權限設計的業務邏輯展開了梳理說明,并對相關問題展開了分析,希望通過此文能夠加深你對電商后臺設計的認識。

在說權限設計前我們先來看個現實中的實例,大家在電影里面應該都見過這樣的場景,當一個客戶想進入銀行倉庫查看自己的私人保險柜信息時,通常都需要經過幾個步驟:

  1. ?首先進入銀行并說明自己是銀行的客戶以及來意
  2. 由業務經理帶領進入對應的保險箱倉庫(倉庫應該不止一個,猜得啊,我也沒有進去過^_^)
  3. 業務經理帶著客戶在眾多保險箱中找到屬于客戶的私人保險箱
  4. 客戶輸入密碼自己打開保險箱查看內部物品

在上面的實例中,客戶在看到保險箱的物品之前,他需要有這么幾個必要條件:

  1. 在銀行有開戶信息,能證明自己是銀行客戶
  2. 有進入保險箱倉庫的權利
  3. 在眾多的保險箱中找到屬于自己的那一個
  4. 有打開保險箱的鑰匙

了解了上面的過程,對于我們理解一個系統的權限就會容易很多,我們再來梳理一下用戶在系統中看到數據的過程:

  1. 用戶需要進入系統,這需要后臺管理員給用戶分配賬號(后臺系統是沒有注冊功能的)
  2. 用戶進入系統能看到哪些菜單導航,需要后臺給配置
  3. 通過菜單進入到具體的頁面,在頁面內能訪問多少數據量也是有訪問限制的
  4. 看到數據了,能對數據做多少操作也是有操作限制的

在上面的過程中,除了第一步的分配賬號是由管理員操作的,剩下的三步都和用戶所擁有的權限相關。通過具體操作對象的不同,上面三步可以分為兩類:

  • 功能:對功能的限制也稱功能權限,主要是對訪問區域以及對應操作的管理,如上面的倉庫、頁面以及頁面操作按鈕。
  • 數據:對數據的限制也稱數據權限,主要是對數據資源的訪問控制,如保險箱和頁面顯示數據。

知道了需要對哪些對象進行管控限制,那么設計功能也就有了針對性,接下來我們一一分析。

01 功能權限

功能權限指的是用戶具體能訪問哪些菜單,以及對菜單頁面中的哪些按鈕有操作權限。把多個菜單和對應的功能按鈕組織到一起就行程了一個權限列表,具體的組織方式如下圖:

對于用戶來說,它又是如何獲得這些權限列表的呢?通常有以下幾種方案:

方案一:ACL(Access control list), 權限訪問列表

通過直接將用戶和權限列表綁定在一起,實現的權限管理

  • 優點:可以為每個用戶個性化的設置訪問權限。
  • 缺點:當用戶數量多,并且擁有相同職能的用戶較多時,修改一次權限,就需要耗費很大力氣。如銷售部有很多的銷售專員,因為他們的職位相同,所有獲得的操作權限相同,但后期添加或者刪除一個訪問權限,那么需要給所有人相同職位的人都操作一遍,管理員估計得累死。所以這種設計方案在開發中使用的頻率很低。

方案二:RBAC(Role-Based Access Control),基于角色的訪問控制

通過先創建一個角色,然后將權限列表在綁定在這個角色上,之后再將角色和綁定到用戶身上,用戶就可以獲得這個角色的所有權限。

  • 優點:首先多人可以公用一個角色;再者如果需要對權限進行調整,只需要調整對應角色的權限即可,也就是只需要一次操作,非常易于操作和管理。
  • 缺點:上面優點也是一個缺點,因為權限的操作是按角色來完成的,所以每次修改含有相同角色的用戶都會被影響。

如對于同一職位的職員,正常來說大家的權限都是一樣的,但是也會有特殊情況發生,比如給其中一個添加或減少部分權限,這個時候就沒有辦法了。對于這種情況,在現有的設計功能上也是有辦法解決的。

通常的方案就是在給角色綁定權限時,先采用權限最小化原則,能少給就少給,然后再做一個角色綁定多余的權限,再把這個角色也綁定給職員,這個時候兩個角色的權限就合并到一起了,也就是用戶和角色之間是一對多的關系。


對于RBAC還有幾個擴展模型:

  • 第一種:在角色上加入了上下級關系,上級可以繼承下級的權限
  • 第二種:在角色之間加入了多個約束關系,如角色互斥、用戶基數限制等

實際開發中這些擴展模型,我們基本都不用,開發成本太多,實際意義和并不是很大,基本的模型已經足夠完成我們的系統需要。如果想了解的同學,網上搜索一下RBAC,有很多教程我這里就不說了。

下面是基于RBAC的原型設計圖:

▲角色列表頁

▲角色授權頁

02 數據權限

對于數據權限的管理比較復雜,這個主要還是有具體的業務來決定的,下面我們就看幾種常見的數據場景以及解決方案。

場景一:分上下級的數據訪問

企業中通常都有銷售部,銷售部下又分各個大區,大區下又劃分小組。對于銷售人員來說,他們的薪資是和業績掛鉤的,所以沒有人會把自己的客戶資源讓你別人的,這就導致數據處理上,銷售專員通常只能看自己的(自愿共享的就不再這里討論),而對于銷售主管則能看到手下所有的銷售專員的客戶資料,同理,大區經理,和銷售總監也都能看到自己手下所有人的客戶資源。

在這種場景下的數據,很明顯是能看出,這是根據企業的組織架構,根據職員的職位高低來控制數據的訪問權限。所以它通常的解決方案是和組織架構相關聯的,具體邏輯如下:

  1. 在給職員分配賬號的時候,設置好對應的部門和職位
  2. 當用戶獲取數據時,根據自己當前的部門和職位,獲取到所有下屬的職員信息
  3. 將屬于這些下屬職員的所有客戶信息顯示出來,這個數據控制就完成了

場景二:分區塊的數據訪問

分區塊的典型案列就是電商企業員工對多個倉庫的訪問問題,我們假設有一個大的電商平臺,它在全國有多個倉庫,如北京倉、上海倉、西安倉、甘肅倉。對于各個倉庫的職員來說,通常他們只有當前倉庫的數據訪問權限,而對于總公司的買手、技術等人員來說,他們平時要巡檢查看各個倉庫數據,所以需要有全部倉庫的數據。而倉庫的組織架構和買手、技術所屬部門并不存在上下級關系。

在這種場景下的數據,它就是按照分區塊的方式來劃分。要解決這個問題其實也很簡單,就是上面講的【用戶-角色-權限列表】,只是這里的權限列表內容不再是菜單和操作按鈕,而是各個倉庫。

場景三:數據共享

數據共享的場景是很常見的,像我們經常使用的協同文檔軟件,里面都會有將內容共享給個人或者共享給某個組的功能。

這種場景下的的數據,我們需要通過單獨建表,維護共享者和被共享對象的關系,獲取數據時從對應關系表中讀取對應共享數據即可。

場景四:分狀態的數據訪問

分狀態的數據控制,這種場景比較少見,一般出現在流程比較長的業務中。如金融借貸系統中,比如一個用戶想要去借貸平臺上貸款,假設他們的流程如下圖:

通常要完成整個業務流程,需要多個部門相互配合的,由于整個業務涉及了許多客戶隱私信息,所以各個部門的職員一般只允許看到對應步驟的數據,如審查組通常只能看到狀態為【待審核】的信息,風控組只能看到【待評估】的信息,財務組只能看到【待放貸】的信息。

基于這種場景,有兩種解決方案:

  1. 首先在代碼里面配置好部門和職位對應的訪問狀態碼(也就是寫死在代碼里),當用戶訪問數據時,根據部門和職位獲得對應狀態碼,再進行數據過濾。優點就是開發比較快寫幾行邏輯判斷就行了,缺點就是如果想給部分人(如公司領導)設置個性化的訪問狀態碼,就很難做到了。
  2. 還是參考【用戶-角色-權限列表】的方式,將權限列表里的數據更換成業務狀態碼,訪問數據時,先根據用戶設置的角色獲取分配的狀態碼,再根據狀態碼獲取數據。優點是代碼開發完后,任意的個性化都可以手動維護并快速配置。缺點就是開發量稍微大一點。

上面兩種方式其實內部邏輯是一樣的,都是先根據用戶的部門和職位先獲取狀態碼再獲取數據,但是可操作性和擴展性缺完全不一樣。

以上就是權限功能涉及的內容,如果你的業務還有更多花樣,請在下方留言。最后再給出一張用戶綁定權限原型圖,大家根據自己的業務適當調整:

小結

  1. 系統權限模塊的設計時需要考慮兩點:功能權限和數據權限。功能權限和菜單以及菜單頁面內的按鈕相關,而數據權限和業務相關。
  2. 在處理一些有規則調整的功能時,最好設計可以手動維護的,這樣對于后期的維護和擴展會非常方便,否則運營經常會找研發修改配置,這樣的工作即沒有技術含量,時間長了還挺讓人煩的,這點我在工作中深有體會。

 

作者:JackLiu;個人微信公眾號: 揚帆去遠航(ID:Jackai_liu)

本文由 @Jack 原創發布于人人都是產品經理,未經作者許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 【數據共享:需要單獨建表,維護共享者和被共享對象的關系】這一塊可以展開解釋一下嘛,單獨建表的原因

    來自上海 回復
  2. 感謝分享,里面兩個案例寫得很好!解決了我一直以來對于 數據訪問權限設計 如何利用RABC權限來做的疑問。

    來自廣東 回復
  3. 你好,請問分上下級的數據訪問這種數據權限控制方式是寫死的嗎?

    來自北京 回復
  4. 建立不同“角色”,給予不同權限,然后在”角色“中添加賬號,這樣做有什么弊端嗎?

    來自湖北 回復
    1. 角色是一個權限包,但角色與現實崗位往往是脫節的,也就是說如果用戶需要的是X角色和某個頁面的權限,在這樣的后臺構建中不得不關聯多個角色,收到X+Y個權限,會帶來很多風險

      回復
  5. 為啥 部門崗位 和角色 是分開的

    來自河北 回復
    1. 比如我要看屬于本部門所有客戶的數據,只有角色就不能滿足。

      來自廣東 回復
  6. 恰好用到,跟我們的方案幾乎一樣~

    來自廣東 回復
  7. 大佬,加油多多更新

    來自浙江 回復
    1. 公眾號里的內容更新的快一些!

      來自北京 回復
    2. 已關注~

      來自香港 回復