關於使用者登入和許可權驗證功能的實現步驟(八)

2021-08-22 02:34:15 字數 1450 閱讀 2201

關於shiro框架中使用者多站點登入的標識欄位的位置

首先再回顧下,我們整個使用者、角色、功能配置上所要建立的表:

通過以上表實現乙個使用者多站點登入的功能,但是關於siteid放置的位置還需要說明一下我自己的看法。

1、不能放到使用者表

毫無疑問,無法實現乙個使用者對應多個站點的功能。

1、可以放到功能表中

放到功能表中是可以實現的,因為使用者上又授予多個角色,角色上授予多個功能,這樣在使用者登入的時候,可以根據使用者名稱,一直關聯查詢,看看是否當前使用者擁有屬於當前站點的功能,如果擁有,即可以登入,如果沒有,即登入失敗。

但是,大家可以看看上圖,我們的五張表,如果按照我上邊的說的,固然可以實現關聯,而且我們自己系統是這樣實現的。但是我覺得不好,因為這樣做的後果就是,當乙個使用者登入系統的時候,就先關聯查詢使用者表使用者角色關聯表角色表角色功能關聯表功能表五張表,然後通過查詢到的所有功能列表中,查詢siteid的值是否與當前站點的值一致,一致即可以登入。這樣乙個登入功能卻匹配了五張表才能實現反饋,我覺得不是很好。

3、可以放到角色表和功能表中

如果只放到角色表中,這樣通過使用者授予多個站點角色,可以實現使用者對應多個角色的功能。但是這個也有個問題,如果siteid只放到角色表,當在某個站點角色授權功能的時候,就必須只能選擇屬於當前站點的一些功能,至於其他站點的功能就不能選擇。如下:

如上圖,站點系統1站點系統2是兩個系統的功能,但是我在給當前屬於站點系統1的角色授權的時候,顯示功能列表,最好的結果是,只會顯示站點系統1l裡所有的功能,但是因為功能表裡沒有關於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進行驗證 驗證成功後從資料庫中取值進行驗證,驗證成功後將所有的資訊全...