【发布时间】:2016-12-06 15:04:32
【问题描述】:
我有以下权限类。我怎样才能使它在所有视图中都可用,而不必在每个视图中使用以下 using 语句@using MyApp.Extensions
using System.Security.Principal;
namespace MyApp.Entensions
{
public class Permissions
{
private readonly IPrincipal user;
public Permissions(IPrincipal user)
{
this.user = user;
}
public bool CanEditItems
{
get { return user.IsInAnyRole("Manager", "Admin"); }
}
public bool CanDeleteItems
{
get { return user.IsInAnyRole("Admin"); }
}
// Other permissions
}
}
我尝试将其添加到视图 web.config 中,如下所示,但在尝试调用 @if (User.CanDeleteItems) 之类的东西时我没有得到任何智能感知
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyApp.Extensions" />
</namespaces>
</pages>
【问题讨论】:
-
你的意思是不是@model.user.CanDeleteItems 或类似的东西?否则,您的 cshtml 文件中的 User 是什么?
-
@Peter 你误会了。我没有传递模型。该类扩展了 IPrinciple,因此 User 是当前登录的用户。
-
所以您正在根据该条件的布尔结果进行检查并渲染视图的内容?如果是这样,在布局文件级别包装内容不是更好吗?
-
您提供的代码未扩展
IPrinciple。 -
如果我的答案解决了您的问题,请不要忘记将我的答案标记为已接受
标签: c# asp.net-mvc razor iprincipal