在ASP.Net MVC视图中显示/隐藏链接

时间:2009-12-07 05:49:49

标签: asp.net-mvc permissions views url

我正试图弄清楚如何根据用户的角色显示/隐藏用户的链接。我知道如何设置动作方法的authorize属性,但是如果用户在我的角色数据库中说管理员或管理员,我就无法在视图中显示链接show hide。

有人可以指向我的任何好文章或代码示例吗?

4 个答案:

答案 0 :(得分:11)

在您的视图中,您可以通过IPrincipal的{​​{1}}媒体资源引用System.Web.Mvc.ViewPage用户。

E.g。在您的视图中,您可以使用以下内容:

User

HTHS,
查尔斯

答案 1 :(得分:2)

对于MVC来说,这是我真的不喜欢的一件事(如在ASP.Net MVC中,而不是模式),将UI逻辑移动到标记中是一种趋势。

在aspx中无法对该逻辑运行单元测试。

我个人认为具有合适的UI模式(MVC或MVP等)的webforms比使用无法测试的条件逻辑的页面更适合。

答案 2 :(得分:1)

<% if(HttpContext.Current.User.IsInRole("Admin")){%> <a href="/Admin">Admin</a> <% } %>

使用此代码。这更容易。

答案 3 :(得分:0)

我使用静态类进行角色验证,在使用此类的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(Action =“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);
    }
}