在我的mvc5项目中禁用未授权用户的操作链接我确实喜欢这个
@if (User.IsInRole("Admin") | User.IsInRole("Manager"))
{
@Html.ActionLink("Add New Record", "ProductTypeIndex", "ProductType")
}
但如果要检查的角色很多,那么这个@if()会变长。怎么避免这个?我是否需要定制助手(如果是这样,我该如何处理它)?帮助赞赏..
答案 0 :(得分:27)
您可以编写自己的扩展方法并在代码中使用它。
public static class PrincipalExtensions
{
public static bool IsInAllRoles(this IPrincipal principal, params string[] roles)
{
return roles.All(r => principal.IsInRole(r));
}
public static bool IsInAnyRoles(this IPrincipal principal, params string[] roles)
{
return roles.Any(r => principal.IsInRole(r));
}
}
现在,您可以像这样调用此扩展方法:
// user must be assign to all of the roles
if(User.IsInAllRoles("Admin","Manager","YetOtherRole"))
{
// do something
}
// one of the roles sufficient
if(User.IsInAnyRoles("Admin","Manager","YetOtherRole"))
{
// do something
}
虽然您也可以在视图中使用这些扩展方法,但尽量避免在视图中尽可能多地编写应用程序逻辑,因为视图不易于单元测试。
答案 1 :(得分:-2)
<% if (Page.User.IsInRole("Admin")){ %>