在我的 .NET(MVC、 Entity Framework )应用程序中,我在数据库中拥有一些用户权限。例如属性“CanCreateNewContact”。我在页面菜单中也有“新联系人”按钮(在布局 View 中)。我想知道如果用户没有必要的权限如何隐藏此按钮。在经典 View 中,我可以从数据库(通过 EntityFramework)读取 Controller 中的权限。但是如何在布局 View 中做到这一点呢?
最佳答案
您可以从布局 View 中检查 ViewBag 中的值,并使用过滤器根据数据库自动设置该值(您不需要对每个操作执行此查询)。
public class UserRoleAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuted(ResultExecutedContext filterContext)
{
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
//You can do your stuff and set a viewBad value
var ctx = new UserDbContext();
var canDoSomething = ctx.Permissions.Any(x => ...);
filterContext.Controller.ViewBag.CanDoSomething = canDoSomething;
}
}
您的布局将如下所示:
@{
var canDomeSomething = ViewBag.CanDoSomething !=null && (bool) ViewBag.CanDoSomething;
}
@if (canDomeSomething)
{
<button></button>
}
else
{
<span>Not button</span>
}
你的 Controller 看起来像:
[UserRole]
public ActionResult Home()
{
return View();
}
关于.net - 如何在布局 View 中使用 dbcontext(在 .NET MVC、 Entity Framework 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753579/