關於shiro框架中使用者多站點登入的標識欄位的位置
首先再回顧下,我們整個使用者、角色、功能配置上所要建立的表:
通過以上表實現乙個使用者多站點登入的功能,但是關於siteid
放置的位置還需要說明一下我自己的看法。
1、不能放到使用者表
毫無疑問,無法實現乙個使用者對應多個站點的功能。
1、可以放到功能表中
放到功能表中是可以實現的,因為使用者上又授予多個角色,角色上授予多個功能,這樣在使用者登入的時候,可以根據使用者名稱,一直關聯查詢,看看是否當前使用者擁有屬於當前站點的功能,如果擁有,即可以登入,如果沒有,即登入失敗。
但是,大家可以看看上圖,我們的五張表,如果按照我上邊的說的,固然可以實現關聯,而且我們自己系統是這樣實現的。但是我覺得不好,因為這樣做的後果就是,當乙個使用者登入系統的時候,就先關聯查詢使用者表
、使用者角色關聯表
、角色表
、角色功能關聯表
、功能表
五張表,然後通過查詢到的所有功能列表中,查詢siteid
的值是否與當前站點的值一致,一致即可以登入。這樣乙個登入功能卻匹配了五張表才能實現反饋,我覺得不是很好。
3、可以放到角色表和功能表中
如果只放到角色表中,這樣通過使用者授予多個站點角色,可以實現使用者對應多個角色的功能。但是這個也有個問題,如果siteid
只放到角色表,當在某個站點角色授權功能的時候,就必須只能選擇屬於當前站點的一些功能,至於其他站點的功能就不能選擇。如下:
如上圖,站點系統1
和站點系統2
是兩個系統的功能,但是我在給當前屬於站點系統1
的角色授權的時候,顯示功能列表,最好的結果是,只會顯示站點系統1
l裡所有的功能,但是因為功能表裡沒有關於siteid
的資訊,即每一條功能資訊,無法知道它是屬於哪個站點系統的。因此這裡的查詢會把所有的功能列表都展示出來。
既然如此,那麼再到功能表中,新增乙個siteid
,這樣的話,上圖做篩選的時候,就可以根據角色上的siteid
,查詢出只屬於當前站點系統
的功能即可。
即如下圖所示:
這樣做,雖然是兩次定義siteid
但是,在使用者登入的時候,不用像第2條中的那樣,去匹配五張表,這樣只需要匹配到角色表,即三張表,即可。雖然只是少了兩張表,但是角色
資料遠遠少於功能
資料。因此匹配的資料量也是少了很多的。
所以,我覺得第三種的方式是最好的方式。
關於使用者登入和許可權驗證功能的實現步驟(五)
1 使用者名稱保證唯一性 這個應該很容易理解,對於乙個系統來說,使用者名稱是唯一的,不可重複,如果我們在註冊使用者時,比如隨便起了乙個使用者名稱doudouchong這樣的使用者。合理的方式是,在輸入註冊使用者名稱後,頁面應該馬上呼叫乙個介面,即查詢當前使用者名稱是否占用,如果占用應該提示已註冊。在...
Django CBV中的使用者登入許可權驗證
1.cbv模式中,由於view中的檢視為類,所有不能像fbv一樣使用裝飾器,故可以繼承乙個自定義的類,這個類的功能的驗證使用者有沒有登入,需要登入才能訪問這個類 2.utils資料夾中建立mixin utils.py檔案 3.mixin utils.py from django.contrib.au...
django 個人部落格登入及許可權驗證功能的實現
完成註冊後隨即開始進行登入,登入後頁面顯示登入者的名稱 實現如下 前端頁面html,對session進行判斷,有值則顯示登入者的名字 無值則顯示註冊字樣 後台views函式 首先對驗證碼進行驗證 驗證成功後將前端傳入的值放入form進行驗證 驗證成功後從資料庫中取值進行驗證,驗證成功後將所有的資訊全...