我正试图弄清楚如何根据用户的角色显示/隐藏用户的链接。我知道如何设置动作方法的authorize属性,但是如果用户在我的角色数据库中说管理员或管理员,我就无法在视图中显示链接show hide。
有人可以指向我的任何好文章或代码示例吗?
答案 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);
}
}