我正在開發一個項目,其中一些用戶可以扮演角色AdminReader
。這些用戶可以看到所有內容,但無法保存/編輯任何數據。如何在執行操作之前驗證用戶角色?
我知道我能做到這樣:
public JsonResult ChangeStatus(int? id)
{
// AdminReader validation
if (base.User.isAdminReader)
{
return Json(new
{
Message = "You don't have privileges to alter data.",
Success = false,
}, JsonRequestBehavior.AllowGet);
}
// Function code
但我不希望插入所有項目函數中上面的代碼。
我想我可以裝飾我的方法,就像我們使用[HttpGet]
。我也讀過這個SO post。
然後我放棄了這個想法。
但後來我發現有關異常處理程序屬性和日誌記錄操作過濾器。
是否有可能以某種方式將public void OnActionExecuting(ActionExecutingContext filterContext)
與我的AdminReader驗證相結合?
我不知道這是否是正確的方式去解決我的問題。另外,我不確定它可以真正起作用。這種情況下的最佳做法是什麼?
任何建議,歡迎提前致謝。
您是否想要限制一整套控制器,以便它們只能由一個角色訪問? – BillRuhl
@BillRuhl。假設一個帶有按鈕的表格列表來改變每一行的狀態(這是我的例子)。'AdminReader'可以查看錶列表(控制器中的一個'PartialViewResult'),但不能'ChangeStatus'(在同一個控制器中的'JsonResult')。它幾乎適用於每個控制器,無論是帶按鈕的列表來更改狀態,還是帶有編輯值的按鈕的模式。該視圖是可訪問的,但方法不應該是 –
我會在視圖本身而不是在控制器中嘗試@if(User.Identity.IsAuthenticated &&!User.IsInRole(「AdminReader」)){// render button} 。換句話說,如果用戶的角色是「AdiminReader」,那麼不要渲染按鈕.. – BillRuhl