基於角色的使用者許可權控制系統實現(rbac)

2021-09-25 08:23:08 字數 860 閱讀 8499

在本篇文章中,我將分析詳細的將思考過程

在乙個系統中,許可權可以看做是原子操作,對於每一種角色,定義為許可權集合,角色與許可權的關係為多對多關係,使用者與角色也是多對多的關係。從這個角度來看,我們實現許可權管理系統,至少需要三個表,使用者表,角色表和許可權表。而使用者與角色、角色與許可權的關聯關係的儲存可以有多種實現方案。例如:可以在使用者表裡面新增乙個字段,以點分字串的形式儲存當前這個使用者擁有的角色列表,同理,角色表也可以新增乙個字段,以點分字串的形式儲存當前角色擁有的操作許可權。或者我們可以建立兩個關係表,分別表示使用者-角色關係和角色-許可權關係。本例以點分字串的形式來儲存關聯關係。所以只涉及到三個表:users/roles/resources。

我們可以以手工的方式,將所有resources(api資源(url+method))先放到資料庫中。然後只需要將特定的resource資源集合賦予給某角色就行了。然後以同樣的方式將角色集合賦予給某使用者就行。好了,賦予使用者角色許可權就沒啥問題了。

假如使用者a擁有了一定的許可權,那麼他登入之後,現在他對幾個api介面發起了請求,系統中應該如何去判斷該使用者擁有哪些api的使用許可權呢?

解決方案一:定義乙個通用的服務方法,在每個介面裡面判斷當前使用者有沒有當前介面對應的角色。這個通用的服務方法可以implements initializedbean ,從而實現其方法,達到對資料庫的查詢只做一次的目的,查詢完一次之後,只需要將所有許可權-角色集合的對應關係快取起來,然後來一次請求,就從快取中取出當前api所需的所有角色集合然後與當前使用者擁有的角色集合取交集,如果交集大小為0,則表明當前使用者沒有許可權,反之,則有。

解決方案二:可以將上述方案,移植到filter中。利用filter的init()方法只呼叫一次的特性,對資料庫只查一次。而且,在filter中只需要將**寫一次就行了。是方案一的改進版本。

基於角色的許可權控制

asp forums中基於角色的許可權控制 asp.頁面如何控制頁面依據不同使用者許可權有不可見 可見 編輯 三種操作許可權 做過許可權管理和想做許可權管理的人進來 附我的思路 懇求許可權分配的例子 高分求使用者許可權管理 c 或演算法 請問在 artclient應用中,如何做到科學的身份驗證和許可...

基於角色的許可權控制

aspnetforums中基於角色的許可權控制 asp.net頁面如何控制頁面依據不同使用者許可權有不可見 可見 編輯 三種操作許可權 做過許可權管理和想做許可權管理的人進來 附我的思路 懇求許可權分配的例子 高分求使用者許可權管理 c 或演算法 請問在smartclient應用中,如何做到科學的身...

我的許可權控制系統實現

許可權系統設計與實現 功能 能夠提供客戶強大而又靈活的許可權控制方案 並且易於與其他系統無縫結合。實現技術 struts 2.x hibernate 實現方法以及關鍵 作為乙個要投入使用的系統,它必須有明確的功能 比如 這個系統能夠做哪些事情,這些事情是不是每個系統使用者都能夠做還是只有特定的系統使...