[英]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);
...
我可以輕松地在會話中存儲用戶ID
和Role
,然后通過在每個相關控制器上調用某些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.