0
我想使用新的MVC4 DbDataController公開一個寧靜的數據api。授權屬性不過濾DbDataController
我的問題是試圖確保這一點。我創建了從授權獲得屬性
public class AdminOnlyAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!IsAllowed()) {
filterContext.Result = new HttpUnauthorizedResult("Not logged in");
}
...
}
自定義授權屬性和在應用到我的正常控制器操作工作正常。我試圖用同樣的事情在我的數據服務是這樣的:
[AdminOnlyAttribute]
public class DataServiceController : DbDataController<AppBuilderDataContext>
{
[AdminOnlyAttribute]
public IQueryable<Thing> GetThings()
{
return DbContext.AllMyThings();
}
}
你可以看到我一直在嘗試,控制器和動作都在我的屬性,但它沒有燒製的任何一個。我在我的授權屬性函數中設置了一個斷點,並沒有被調用。
我很確定斯科特格思裏說這是行得通的。我做錯了,還是我需要一種完全不同的方法來確保這些?
感謝您的答覆派生。這與System.Web.Mvc.AuthorizeAttribute有很大不同。除此之外,互聯網上還沒有任何關於這一點的內容,除非是msdn對其存在的簡要承認。 我的第一個問題是,這種類型的屬性是否也適用於我的正常mvc操作?或者我需要一個重複的授權屬性類嗎? – GeekyMonkey 2012-02-28 10:11:30
在測試版中,是的,你需要屬性的類型,一個用於MVC控制器,另一個用於API控制器。我們正在考慮在enxt中降低這個問題。 – marcind 2012-02-28 16:12:16
我已經決定通過創建一個自定義的RoleProvider來避開這個問題,然後把它放在我的DbDataController頂部,使用AuthorizeAttribute ='System.Web.Http.AuthorizeAttribute';' 然後我可以把它放在我的數據動作或類) '[Authorize(Roles =「SuperAdmin」)]' 它沒有做我所需要的一切,但它是一個開始。在某些情況下,我需要查找用戶記錄來檢查他們是否可以訪問特定的記錄,所以這不會削減它。 如果我們有相同的MVC過濾器可以使用這些新控制器,那將會更好。 – GeekyMonkey 2012-02-28 16:48:08