簡體   English   中英

具有角色的C#MVC簡單自定義身份驗證

[英]C# MVC Simple Custom Authentication with Roles

TL; DR

編輯

基本上,我只想告訴一些功能:好的,我已經檢查了這個用戶的自我,他很好。 現在,存儲有關他的任意數據,並為他創建一個會話,授予他訪問我應用程序某些部分的權限。

這種東西:

logInUserFrameworkFunction(new UserStruct(int id, string username, RolesEnum[] roles));

而且,所有事情都在后台處理,以使[Authorize(Roles = RolesEnum.Admin | RolesEnum.Manager)]屬性起作用。

我可以自己做一些會話,但是我想跳過那一部分:D


我正在玩MVC和Entity Framework,現在我想用角色實現簡單的用戶身份驗證。

我的數據庫中有User類/表,看起來像這樣:

public class User {
    int ID;
    string Email;
    string Password;
    Role Role;
...
}

Role類看起來像這樣:

public class Role {
    int ID;
    RoleType Type; // this is an Enum
}

public Enum RoleType {
    visitor, employee, admin
}

現在,在登錄控制器中檢查是否存在具有指定用戶名和密碼的用戶很容易,我只是這樣做:

[HttpPost]
    public ActionResult LogIn(LogIn login) {
        // If credentials are valid
        if(new UserManager().IsValid(login.Username, login.Password)) {
            var user = db.getUserByEmail(login.Username);
...

我可以輕松地在會話中存儲用戶IDRole ,然后通過在每個相關控制器上調用某些function來檢查憑據,但是我想使用某些C#和MVC功能。


事情是我寧願使用屬性來做,但是我不確定如何做。

這就是我想象的樣子:

[Roles(RoleType.visitor, RoleType.employee)]
public ActionResult SomeProtectedAction() {
// only employee and visitor can access this,
// others get redirected to where ever
...
}

您可以使用以下角色進行授權:

[Authorize(Roles= MyEnum.Admin | MyEnum.Moderator)]
public ActionResult myAction()
{
}

這里的Authorize屬性在控制器級別應用,但是您可以根據需要將其僅應用於操作方法。

只要您正確設置了身份驗證邏輯(ASP.NET身份),它將返回一個包含用戶角色的身份驗證cookie。 現在,成功登錄后,如果您向控制器方法發出請求,則cookie將在后台解壓縮,而User屬性this.User被填充此數據(包括該用戶的角色)。

authorize屬性將自動為您進行檢查。

暫無
暫無

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

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