leo*_*ora 3 asp.net asp.net-mvc entitlements asp.net-mvc-4 asp.net-mvc-5
我有一个带有SQL Server后端的ASP.NET-MVC网站.我有许多控制器操作,要求我进行权利检查.
现在,我这样做:
public ActionResult SomeEntitledPage()
{
if (_myModel.IsMySiteAdminRole)
{
return View(new MyViewModel());
}
else
{
return View("NotEntitled", new NotEntitledViewModel(){Page = "[PageName]", SupportDG = "support@support.com"});
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但感觉就像我在许多地方重复这个逻辑.
根据以下内容,将许多权利控制器操作"安全"的最佳方式(属性等)是什么?
(IsMySiteAdminRole如果没有权限,它可以检查并返回"未授权"视图.
我还想确保每个页面都没有性能损失?
我更喜欢为Entitlement/Privilege逻辑使用动作过滤器.这些过滤器的优点是它们可以在动作方法填充模型后运行.
例如:
public class AdminOnlyFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (!filterContext.Controller.ViewData.Model.IsMySiteAdminRole)
{
filterContext.Result = new ViewResult
{
ViewName = "NotEntitled",
Model = new NotEntitledViewModel(){Page = "[PageName]", SupportDG = "support@support.com"}
};
}
base.OnActionExecuted(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
动作过滤器允许您有选择地覆盖Controller的OnActionExecuted方法.
此属性可以应用于特定操作或整个控制器.结果将取决于您的模型值,并将仅更改您的视图.
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |