将用户角色:“Admin”附加到单个 html 元素

问题描述

我的用户角色链接在我的控制器上方的自定义 AuthorizeAttribute 中。(我使用 Asp.net 框架)

  1. 我希望管理员用户进入他们会遇到 401 错误的区域。 (删除了一些代码以保持简单)
[PermissionBaseAuthorize(Role = "super_admin")]
public ActionResult Details()
{
  return View()
}
  1. 一旦完成,我希望管理员用户只能编辑客户详细信息视图中的电子邮件字段,而不能编辑此视图上表单中的任何其他字段。

如果有更简单的方法请帮忙分享

解决方法

对于问题1,可以使用继承自AuthorizeAttribute的类,然后检查是否用OnAuthorization登录,然后用User.IsInRole("Admin")检查用户角色 然后您可以使用 AuthorizationContextHttpContext 发送错误消息并重定向...

这是您可以开始使用的代码:

public class PermissionBaseAuthorize: AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (HttpContext.Current.Session("UserID") == null || !HttpContext.Current.Request.IsAuthenticated)
        {
        }
        else if (User.IsInRole("Admin"))
            filterContext.HttpContext.Response.StatusCode = 401;
            filterContext.Result = new RedirectResult("your url")
            ...

对于问题 2,您需要添加一些代码,例如:

 @if (User.IsInRole("Admin"))
 {
     @Html.ActionLink("Edit","Edit",new { id = item.ID }) <text>|</text>
     ...           
 }

我建议你看看下面的教程,它可以帮助你。 Role-Based Menus in MVC,但最好从头阅读全文。

编辑:

这里还有一些使用 AuthorizationContext 的教程: Custom REST authorization in ASP.Net MVC