做了幾個前後端分離的專案,都遇到了許可權管理的問題。這裡總結一下實現的方案及注意事項。
鑑權的需求一般是這樣的,假設有 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...