2014-11-20 115 views
1

在我的應用程序中,有三種類型的用戶。管理員,超級管理員,普通用戶。我想做沒有角色概念和使用聲明的身份驗證。在asp中有一個名爲AspNetClaims的表格。如何填寫此表與索賠?當第一次用戶註冊時,他應該被分配索賠(管理員,超級管理員,用戶)。接下來,當用戶登錄時,我必須能夠找到用戶的類型。我該如何實現它?MVC5中基於聲明的身份驗證

我的另一個問題是:在這種情況下,它是正確的做基於要求的認證沒有任何角色的概念?

+1

你對角色的要求有什麼不同?你幾乎創造了角色,但將它們保存爲聲明。讓你的生活更簡單,並隨角色而去。 – trailmax 2014-11-21 01:26:10

+1

請注意,MVC5爲角色創建聲明。所以你的要求已經實現了。 – Shoe 2014-11-21 15:27:24

回答

0

如果您只有具有給定類型的所有用戶都可以擁有相同權限的用戶類型(而不是用戶針對不同數據記錄的權限因用戶而異),那麼如果您使用的是基於角色的權限而不是基於聲明的權限,則實際上的效果相同。

使用聲明的一點是,它可以讓你做,你可以通過角色和更多做的一切。索賠給你更多的靈活性:例如您的數據庫可能包含幾個不同客戶端(ClientA和ClientB)的數據,每個客戶端可能都有一個管理員用戶(例如AdminUserA和AdminUserB),但他們只擁有與他們所屬的特定客戶端相關的記錄的管理權限。

在這種情況下,你可以通過給用戶AdminUserA型客戶端A與價值管理的索賠,以及用戶AdminUserB型ClientB與價值聯繫索賠做到這一點。然後,在代碼中,只允許聲明值爲Admin的聲明用戶使用客戶端名稱來管理客戶端的記錄。

查看我對How to add claims in ASP.NET Identity的評論,其中提供了向用戶添加聲明的兩種不同方式(不幸的是,Microsoft似乎沒有很好地記錄這一點,所以不清楚是否需要這兩種方法!)。如上所述,您可以通過IdentityModel.cs(MVC5項目內)中的ApplicationUser類的GenerateUserIdentityAsync(UserManager管理器)中的manager.AddClaim(userID,聲明)向AspNetClaims表(但不cookie)添加聲明。

您可以檢查什麼要求用戶具有如下: 當用戶登錄時,userIdentity.Claims應該包含所有權利要求的用戶(包括那名在AspNetClaims 用戶之前登錄的自定義聲明,但因爲通過manager.AddClaim不任何添加!),和manager.GetClaims(用戶ID)應返回的所有用戶的自定義聲明(包括那些通過manager.AddClaim加入!)。這很麻煩,而且微軟真的應該整理一下,或者至少把它記錄下來!

希望這有助於

1

第1步:你必須在一個操作方法適用於您的過濾器像下面的例子

這裏是我的操作方法:

[AuthAttribute] 
     [CustomAuthorize("Admin", "SuperAdmin")] 
     public ActionResult GetEmployeeList(string sortOrder, string currentFilter, string searchString, int? page) 
     { 

      List<GetListviewData_Result> listGetListviewData_Result = db.GetListviewData().ToList(); 
return view(listGetListviewData_Result); 
} 

2步:您必須在您的授權過濾器方法中編寫代碼,如下面的示例

這是我的授權過濾器:

protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      var userEmailId = httpContext.Session["userName"]; 
      bool authorize = false; 
      foreach (var role in allowedroles) 
      { 
       /* getting user form current context */ 
       var user = context.user_tbl.Where(m => m.emailId == userEmailId && m.role == role); 
       if (user.Count() > 0) 
       { 
        authorize = true; /* return true if Entity has current user(active) with specific role */ 
       } 
      } 
      return authorize; 
     } 
相關問題