前後端分離 通用鑑權方案 (分組許可權)

2021-09-27 07:18:31 字數 1715 閱讀 3445

做了幾個前後端分離的專案,都遇到了許可權管理的問題。這裡總結一下實現的方案及注意事項。

鑑權的需求一般是這樣的,假設有 a(主頁), b, c, d(系統配置頁) 四個頁面:

使用者與頁面是多對多的關係,相互之間會有交叉,所以使用簡單的分級許可權實現起來是很麻煩的。如果新增乙個使用者,使其能訪問abc,就需要新建乙個分級,使其只有abc的許可權。假設某一天又有使用者需要訪問 acd呢?

因此,在許可權有交叉的情況下,使用分組許可權是比較好的方案。

分組許可權的核心思想可以用下圖表示

這麼說有點抽象,我們還是結合之前的例子,看用分組許可權怎麼解決。

系統建立 超級管理員、一類管理員、二類管理員、測試員、普通使用者 幾個分組。

使用者和分組之間 通過 使用者-分組 表建立多對多關係

頁面設定 針對使用者的分組進行鑑權,通過則允許訪問

下面用程式設計師最喜歡的方式來解釋一下

from typing import list

# 分組表

groups =

# 使用者表

users =

# 使用者分組表

user_group =

# 頁面及允許的使用者組

pages =[,

,,]def

get_group_names_by_uid

(uid:

int)

-> list[

str]

:"""

通過uid獲取許可權組列表

"""res =

for gid in user_group[uid]

:# 取出使用者對應的許可權組列表並轉換為組名列表

)return res

defauth

(user_access: list[

str]

, page_auth: list[

str])-

>

bool

:"""

兩個集合是否有交集,有則通過

"""ifnot page_auth:

# 頁面不鑒權

return

true

for g in user_access:

for a in page_auth:

# 因為元素很少,所以直接暴力雙迴圈也很快

if g == a:

return

true

return

false

if __name__ ==

"__main__"

:for uid, name in users.items():

# 使用者嘗試訪問所有頁面

for page in pages:

access = get_group_names_by_uid(uid)

# 查出使用者的許可權組

print

(name,

' 訪問:'

, page[

'name'],

'通過'

if auth(access, page[

'allow'])

else

'未通過'

)print

('\n'

)

待續

前後端常見的幾種鑑權方式

目前我們常用的鑑權有四種 token 驗證 oauth 開放授權 一.http basic authentication 這種授權方式是瀏覽器遵守http協議實現的基本授權方式,http協議進行通訊的過程中,http協議定義了基本認證認證允許http伺服器對客戶端進行使用者身份證的方法。認證過程 1...

前後端常見的幾種鑑權方式

每個專案產品都要加埋點,加500行埋點是不是會占用你一兩天的時間而且很容易犯錯,想只用一小時準確加完這500行埋點剩下一天喝茶聊天麼?來試試這520工具,高效加埋點,目前我們公司100號前端都在用,因為很好用,所以很自然普及開來了,推薦給大家吧 目前我們常用的鑑權有四種 token 驗證 oauth...

前後端分離 頁面許可權驗證

前端驗證 登入後 新增登入標識 localstorage.login true inc.js 公共標頭檔案處理,沒有登入 跳轉登入 top.location.href 獲取本地絕對路徑或網域名稱訪問路徑 var href document.location.href var abspath absp...