簡體   English   中英

asp.net mvc中不同用戶類型的自定義身份驗證和授權

[英]Custom Authentication and Authorization for different user types in asp.net mvc

我正在一個項目中,有三種不同的用戶類型(管理員,家長和教師)可以訪問該網站。 用戶通過提供其憑據並選擇其類型來登錄,如下圖所示。

登錄表單

我想為用戶提供自定義身份驗證和授權。 通過使用教程中的方法,我為每種用戶類型擴展了MemberShipProvider類,並覆蓋ValidateUser方法,最后得到三個名為AdminAuthProvider,ParentAuthProvider和TeacherAuthProvider的類。 這是AdminAuthProvider中ValidateUser方法中的代碼

public override bool ValidateUser(string username, string password)
    {
        if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        {
            return false;
        }

        using (var db = new pscsEntities())
        {
            return db.Admins.Any(admin => admin.username.Equals(username) && admin.password.Equals(password));
        }
    }

其他兩個類中ValidateUser的代碼相同。 我的問題是-是否有更好的方法在單個類中而不是在擴展相同類的三個類中進行認證? -在這種情況下如何提供授權角色? 對於第二個問題,以上教程建議擴展RoleProvider類並覆蓋其方法。 我似乎無法弄清楚如何覆蓋GetRolesForUser方法,因為它僅采用一個字符串參數,該參數是當前登錄用戶的用戶名。 我在這里有點困惑。 如果有幫助,這里是數據庫中三個用戶的表圖 表格圖

您的解決方案似乎混淆了兩個相關但截然不同的功能:身份驗證和授權。

身份驗證會告訴您用戶是誰。 授權通常在身份驗證之后發生,並告訴您用戶可以做什么,通常表示為一個或多個角色的列表。 在這種傳統模型下,您將為所有三種類型的用戶只有一個表,並且只有一種對其進行身份驗證的方法。 通過身份驗證后,數據庫將告訴您用戶具有什么樣的角色(老師,學生或管理員)。 根據角色,該網站將公開不同的功能集。

在您的模型下,用戶角色的表達在身份驗證過程中完結。 實際上,用戶本人會在身份驗證過程中告訴您他的角色。 這是不尋常的設計,並且由於多種原因而變脆。 例如,想象一種新型的用戶角色(例如“老師的助手”。)根據當前的設計,您必須添加第四個數據庫表和新表的域對象管理功能,以及第四個包裝器類。驗證碼。 您的設計還排除了具有多個角色的用戶(如果我既是管理員又是老師,該怎么辦?)

我建議您重新訪問該設計,並允許用戶僅提供用戶名和密碼,並允許系統確定他是學生,老師還是管理員,或者是這些的組合。 通過這種設計,您只需要一個身份驗證類,並且GetRolesForUser會更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM