Как использовать мой Custom AuthorizeAttribute на мой взгляд - PullRequest
0 голосов
/ 26 ноября 2010

Я создаю свой выигранный атрибут авторизации.Это прекрасно работает в контроллере.Как я могу использовать его в представлении.

Пример: у меня есть ссылка для управления пользователями. Если у вас нет доступа к этой странице, я не хочу показывать ссылку.

Вот мой атрибут авторизации.

public class UserAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.Session["UserID"] == null)
            {
                return false;
            }

            IIssUserRepository repUser = new IssUserRepository(EntityFactory.GetEntity());
            IssUser usr = repUser.GetUserByID(Convert.ToInt32(httpContext.Session["UserID"]));

            return usr.CanManageUser;
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if (filterContext.Result is HttpUnauthorizedResult)
            {
                filterContext.Result = new RedirectToRouteResult(
                  new RouteValueDictionary {
                      { "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
                      { "area",""},
                      { "controller", "Account" },
                      { "action", "Unauthorized" }
                    });
            }

        }
    }

Вот как я использую его в контроллере:

 [UserAuthorize]
 public class UserController : Controller

Мне нужно использовать это в представлении.Но как

<li class="CssMenui">Product</li>
<%if (......... UserAuthorize .......) %>
    <li class="CssMenui">User Management</li>
<li class="CssMenui">Other</li>

1 Ответ

0 голосов
/ 26 ноября 2010

Глупое решение - добавить флаг в ViewData в переопределении для OnAuthorization:

var view = filterContext.Result as ViewResult;
if (view != null)
   view.ViewData["IsAuthorized"] = !(filterContext.Result is HttpUnauthorizedResult);

и после этого ваш взгляд может быть переписан:

  <li class="CssMenui">Product</li>
  <%if (((bool?)ViewData["IsAuthorized"]) == true) %>
      <li class="CssMenui">User Management</li>
  <li class="CssMenui">Other</li>

выглядит немного грязно для меня, но это может помочь.

...