如果需要,可以提供更多信息,請先在此發佈!授權角色組合
我目前正在使用標準角色授權(webpages_roles/webpages_usersinroles)
功能管理asp.net mvc4中的網站。
這工作細到一個點,actionresults內控制器適當裝飾有標記,如:
[Authorize(Roles = "Admin")]
或多個角色,其中一個可以訪問:
[Authorize(Roles = "Admin, Manager")]
我需要做,是授權多個角色,"AND"
而不是"OR"
的情況。 例如用戶必須既是"Manager"
角色又是"Finance"
角色才能訪問控制器。只有"Manager"
或僅有"Finance"
的用戶,但不能同時訪問操作結果。
這將如何實現?搜索結果顯示人們談論擴展授權屬性,但如果有關於如何做到這一點的具體建議或更直接的話,在這種情況下它將非常有用!
Spike的解決方案有細微的修改工作,在for each
使用var
創建char
數據類型,在IsInRole
功能需要string
最終代碼:
public class AndAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
IPrincipal user = httpContext.User;
try
{
if (Roles != null && Roles.Any())
{
foreach (string r in Roles.Split(','))
{
if (!user.IsInRole(r))
return false;
}
}
return true;
}
catch (Exception ex)
{
return false;
}
}
}
感謝您的幫助秒殺,這是99%的完美,我只是稍作修改代碼。我將編輯原始帖子以突出問題和解決方案。 – Zerk
啊,是的,你是完全正確的,我忘了角色不是一個數組,而是一個字符串:D我的壞!很高興我可以幫助:) – Spike