基於角色的許可權控制實踐

2021-09-22 07:06:44 字數 1414 閱讀 4577

本文目的

許可權控制,只要不是單機應用,幾乎都會用到。前一整子為乙個新專案新增了許可權控制,採用的是基於角色的方式,感覺實現起來比較簡單,而且實用,所以記錄下來,作為備忘,以後應該用得著。

許可權=行為+資料型別

在此解決方案中,許可權是行為資料型別的組合。

通過短碼對行為和資料唯一標識,通過行為和資料的組合標識許可權。舉個例子,對於增刪該查,可以分別用「add」,「delete」,「edit」,「read」這個幾個單詞的前幾個字母標識,依次是「add」,「de」,「ed」,「re」。對於商品(product),類目(category),賣家(seller),買家(customer),也可以分別用「pr」,「ca」,「se」,「cu」標識。

現在用上面的短碼來確應乙個許可權,如「檢視賣家資訊」許可權,可以使用「re:cu」來標識。

使用者-角色-許可權

角色是許可權的集合。角色是作為使用者與許可權的紐帶,可以方便的設定使用者具的許可權。下面是角色,許可權和使用者三者之間的關係。

上面表中的id,name和description都是一些常用字段,主要需要注意permission表中的actioncode欄位和datatypecode欄位,這些是用來存放行為和資料型別簡碼。通過上面的表關係,可以定位使用者具有哪些許可權。同時,為使用者新增刪除角色也十分方便。

訪問控制

此方按試用於php專案,但不僅限於php。在任何頁面的開始部分使用如下**:

assertaccesshtml(actioncode, datatypecode)

或assertaccessjson(actioncode, datatypecode)

上面兩個函式執行的邏輯相同,只是在使用者沒有許可權時,輸出不同。前者直接輸出錯誤頁面,後者輸出相同內容的json資料,適用於非同步訪問。上面兩個函式的邏輯如下:

在session中拿到當前使用者的id

獲取使用者的所有許可權(可以直接訪問db,也可以通過快取)

根據傳入的actioncode和datatypecode的組合,檢測使用者是否具有許可權

如果有,怎麼都不做,直接返回

如果沒有許可權,提示錯誤,並退出當前請求

結語

此方案的不足在於許可權控制的粒度不能到資料級別。但是,並不是每乙個功能都需要將許可權控制限制在資料級別。對特定模組,可以做特殊處理。沒有最好的許可權控制方案,只有最適合專案的許可權控制方案,希望此方案對你有用。

基於角色的許可權控制實踐

本文目的 許可權控制,只要不是單機應用,幾乎都會用到。前一整子為乙個新專案新增了許可權控制,採用的是基於角色的方式,感覺實現起來比較簡單,而且實用,所以記錄下來,作為備忘,以後應該用得著。許可權 行為 資料型別 在此解決方案中,許可權是行為與資料型別的組合。通過短碼對行為和資料唯一標識,通過行為和資...

基於角色的許可權控制

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

基於角色的許可權控制

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