[英]Custom MVC AuthorizeAttribute that allows for multiple role membership
我已經創建了一個自定義的AuthorizeAttribute類來處理我的MVC4應用程序中的粒度授權。
這是班級:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class isAuthorized : AuthorizeAttribute
{
public oRoles enRole;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
string test = enRole.ToString();
if (!authorized)
{
// The user is not authenticated
return false;
}
var user = httpContext.User;
bool bFlag = AuthCheck.CheckUser(httpContext, enRole);
if (bFlag) // I know this is a lot of code; it's for debugging purposes
return true;
return false;
}
}
我已經聲明了以下枚舉以允許代碼幫助:
public enum oRoles
{
StudentSelfPassword = 1,
StaffSelfPassword = 2,
StudentLookup = 3,
StudentChangeRequest = 4,
StudentAdmin = 5,
StaffLookup = 6,
StaffChangeRequest = 7,
StaffAdmin = 8,
ChangeQueueApproval = 9
}
在我的控制器中,我通過以下方式調用AuthorizeAttribute:
[isAuthorized(enRole = oRoles.StudentLookup)]
[isAuthorized(enRole = oRoles.StaffLookup)]
[isAuthorized(enRole = oRoles.StudentChangeRequest)]
[isAuthorized(enRole = oRoles.StaffChangeRequest)]
當我通過調試器運行時,第一個isAuthorized運行並返回true(應該如此)並繼續到第二個isAuthorized,它返回false然后立即要求我進行身份驗證。 我期待它允許,因為第一個條件是真的。 但是,看來我的假設是不對的。
最初,我有Roles =“change,admin”,它們是域中的組並且它可以工作但是組需要在他們的任務中是動態的而不是靜態的。 我能夠在那里推出多個項目。 是因為它是作為字符串發送的嗎?
有沒有辦法基本上做一個isAuthorized(...)|| isAuthorized(...)|| isAuthorized(...)如果一個條件為真,它被驗證為ok?
在您的屬性中,您可以擁有一個列表或一組角色,而不是具有單個oRole的屬性。 而不是放置一些屬性,用一個屬性裝飾你的方法,但是傳遞一組允許的角色。
[isAuthorized(enRoles = new oRoles[]{oRoles.StudentLookup, oRoles.StaffLookup })]
此處創建一個采用多個值的屬性的示例
然后在您的授權檢查代碼中,您可以檢查已提供的所有允許列表。 類似下面的代碼
bool bFlag = enRoles.ToList().Any( r => AuthCheck.CheckUser(httpContext, r));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.