我想知道是否可以禁用/覆蓋全部授權屬性。在ASP.NET MVC中覆蓋/禁用授權3
在開發機器上,Active Directory組織與生產環境完全不同。當我開發/測試開發環境時,我必須「移除」所有授權屬性。
不同類型的活動目錄組(在授權屬性中)用於控制器操作方法。
[Authorize]
...
[Authorize(Roles="domain\HR")]
...
[Authorize(Roles="domain\IT")]
...
在此先感謝..
我想知道是否可以禁用/覆蓋全部授權屬性。在ASP.NET MVC中覆蓋/禁用授權3
在開發機器上,Active Directory組織與生產環境完全不同。當我開發/測試開發環境時,我必須「移除」所有授權屬性。
不同類型的活動目錄組(在授權屬性中)用於控制器操作方法。
[Authorize]
...
[Authorize(Roles="domain\HR")]
...
[Authorize(Roles="domain\IT")]
...
在此先感謝..
我會做到以下幾點:
編寫自定義的授權屬性,這將作爲默認版本的調試工作,並始終允許的動作,即
public class MyAuthorizeAttribute: AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
#if DEBUG
return true;
#else
return base.AuthorizeCore(httpContext);
#endif
}
}
全部替換Authorize
屬性在用自己的代碼,即
[MyAuthorize]
...
[MyAuthorize(Roles="domain\HR")]
...
[MyAuthorize(Roles="domain\IT")]
...
在調試模式下不斷開發和發佈模式
發表如果你不希望被束縛到調試/發佈件事你可以在項目配置中指定您自己的條件編譯符號 - 例如DEVTEST
,並在步驟1代碼中用DEVTEST
代替DEBUG
。
而是重寫AuthorizeAttribute
的你認爲實現你自己的? 您可以創建屬性並處理驗證邏輯。
事情與此類似:
public class AuthorizeRolesAttribute : ActionFilterAttribute
{
public UserProfileRole[] Roles { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var profile = ((ETMembershipUser)Membership.GetUser()).Profile;
if (profile != null)
{
foreach (UserProfileRole role in Roles)
{
if (role == profile.Role)
return;
}
}
//throw new SecurityException("You can not access this page");
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "Index");
redirectTargetDictionary.Add("controller", "Home");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
-1對於非常不好的想法 - 通過不從現有的AuthorizationAttribute衍生來實現自定義授權屬性 – archil 2012-03-20 08:25:15
爲什麼這是一個非常糟糕的主意? – MikeSW 2012-03-20 08:26:07
@MikeSW,因爲當你不從AuthorizeAttribute派生時,你不會實現'IAuthorizationFilter'接口。而當你不這樣做時,你的過濾器的執行順序是不同的。例如,模型聯編程序將在您的'僞授權過濾器'之前運行**(我稱之爲僞,因爲您沒有實現適當的接口,因此它不是真正的授權過濾器)。我不會盡力去解決你的問題,但我完全同意他這是一個非常糟糕的設計。 – 2012-03-20 08:35:03
謝謝!這正是我正在尋找... – 2012-03-20 08:43:03
嗨,我不能編輯它,因爲它只有1個字符,但基類拼寫錯誤(AuthrorizeAttribute,在'h'後面有一個'r'),代碼沒有像現在這樣正常工作。 Regards – Jaime 2014-05-07 07:29:35
@Jaime:感謝您的發現!糾正。 – 2014-05-12 05:58:50