我想弄清楚如何根据用户角色显示/隐藏用户链接。我知道如何为操作方法设置authorize属性,但是如果用户在我的角色数据库中是说,管理员或管理员,则无法在链接中显示隐藏。在ASP.Net MVC视图中显示/隐藏链接
任何好的文章或代码示例有人可以指向我?
我想弄清楚如何根据用户角色显示/隐藏用户链接。我知道如何为操作方法设置authorize属性,但是如果用户在我的角色数据库中是说,管理员或管理员,则无法在链接中显示隐藏。在ASP.Net MVC视图中显示/隐藏链接
任何好的文章或代码示例有人可以指向我?
在您的意见中,您可以通过System.Web.Mvc.ViewPage
的User
财产来引用IPrincipal
用户。
E.g.在你看来,你可以有这样的:
<% if (User.IsInRole("Admin")) { %>
<%= Html.ActionLink("Admin only link", "Edit", "Users") %>
<% } %>
<% if (User.IsInRole("Manager") || User.IsInRole("Admin")) { %>
<%= Html.ActionLink("Manager & Admin only link", "Edit", "Product") %>
<% } %>
HTHS,
查尔斯
这是一两件事,我真的不喜欢用MVC(如在ASP.Net MVC,不是模式)有一个将UI逻辑转化为标记的趋势。
一旦它在aspx中,就没有办法对该逻辑运行单元测试。我个人认为带有合适的UI模式(MVC或MVP等)的webforms会比页面上散布着无法测试的条件逻辑更合适。
<% if(HttpContext.Current.User.IsInRole("Admin")){%> <a href="/Admin">Admin</a> <% } %>
使用此代码。这很容易。
我使用一个静态类进行角色验证,并在cshtml中使用这个类,角色验证不在cshtml中。
我有我的授权功能或数据库中的内容(由用户或角色),所以如果访问定义更改,您不必重新部署。
public static class AuthorizeContent
{
public static bool AuthorizeAccessContent(string Content)
{
bool bReturn = false;
DBContext db = new DBContext();
string[] RolesUser = Roles.GetRolesForUser(WebSecurity.CurrentUserName);
foreach (AuthorizedContentRole aut in db.AuthorizedContentRole)
{
foreach (string rol in RolesUser)
{
if (aut.Role==rol && aut.Content==Content)
{
bReturn = true;
break;
}
}
}
foreach (AuthorizedContentUser aut in db.AuthorizedContentUser)
{
if (aut.UserName == WebSecurity.CurrentUserName && aut.Content == Content)
{
bReturn = true;
break;
}
}
return bReturn;
}
///在CSHTML
@if (AuthorizeContent.AuthorizeAccessContent(Content))
{
<li class="two">
<h5>Administrator link</h5>
@Html.ActionLink("Admin secret info","Index", "Information")
</li>
}
你也可以使用像[AccionAuthorize(动作= “为myContent”)
public class AccionAuthorizeAttribute : AuthorizeAttribute
{
public string Action { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
filterContext.Result = new HttpUnauthorizedResult();
else if (!AutorizacionContenido.AutorizaAccesoContenido(Action))
filterContext.Result = new HttpUnauthorizedResult();
base.OnAuthorization(filterContext);
}
}
由于过滤器!这里有一个转折点 - 我在母版页中有我的标签链接,我希望为特定角色显示一个标签。你知道我可以如何给IPrincipal的主人添加一个参考吗? – Ben 2009-12-07 06:54:41
使用'HttpContext.Current.user'或'ViewContext.HttpContext.User' - 应该这样做:-) – Charlino 2009-12-07 07:03:03
啊,现在我可以继续前进......感谢帮助! – Ben 2009-12-07 07:10:17