2016-01-26 30 views
0

在我們的項目管理應用程序,我們需要不斷的訪問權限(每個項目的每個用戶)在一個單獨的表中分貝。 IE瀏覽器。擴展Asp.Net身份IsInRole()方法

用戶A可以創建項目#1的任務, 用戶A只能讀取任務項目#2

要取得成功,我們加入了新的coloumn(專案編號)擴展我們AspNetUserRoles表。

默認情況下,在Razor視圖,我們可以檢查用戶角色與User.IsInRole("CanCreateTask")。我們需要擴展這個方法,並且想要檢查特定項目Ie的用戶角色。 User.IsInRole("CanCreateTask", project.Id)

編輯:此外,我需要檢查用戶訪問的控制器project.Id

[Authorize(Roles = "CanCreateTask")] 

難道網上的一些研究,但找不到任何解決辦法。

+0

看一看[這個答案](http://stackoverflow.com/questions/31846452/claim-based-authorization-design-換有條件編輯操作進行中ASP淨MVC-A/31851128#31851128) –

+0

@SamFarajpourGhamari,我讀了答案,並做一些研究。我明白,我可以編寫自定義的AuthorizeAttribute來做我想做的事情。但在另一[SO回答,(http://stackoverflow.com/questions/31464359/custom-authorizeattribute-in-asp-net-5-mvc-6)說:「我們不想讓你編寫自定義授權屬性如果你需要這樣做,我們做錯了,而你應該寫授權要求。「 。我真的失去了身份。什麼是最好的方式 – umki

+0

答案是偉大的,我完全同意。但請記住基於Identity v3和ASP.Net Core(v5)的答案,所以很遺憾地提到了方法,即授權要求,並未在Identity 2中實現。因此,我認爲對於當前版本的Identity,只要您擴展* *當前授權屬性,而不是從頭開始編寫自己的授權屬性**,這很好。 –

回答

3

您可以創建一個extension method,延長了用戶類。

public static bool IsInRole(this User user, string role, int projectID) 
{ 
    var isInRole = user.IsInRole(role); 
    var hasRoleInProject = // Logic for deciding if it is in the role for this project 

    return isInRole && hasRoleInProject; 

} 

這種方法將被稱爲像這樣:

user.IsInRole("CanCreateTask", project.Id); 
+0

謝謝!我編輯了我的問題。我也需要檢查角色,項目檢查控制器。 – umki

+1

我應該在哪裏擴展IsInRole方法@ Matt-Hensley? – umki

+0

我的答案中的鏈接概述了在哪裏以及如何創建擴展方法。你可以創建一個靜態類來容納你的擴展方法。 –

相關問題