Что я могу вернуть в свой пользовательский атрибут FilterAttribute, если у пользователя нет необходимых прав доступа? - PullRequest
0 голосов
/ 24 января 2012

Вот мой атрибут фильтра:

public class RoleAttribute : ActionFilterAttribute
{
    public string Roles { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            EfUsuarioRepository usuarioRepository = new EfUsuarioRepository();
            var loggedInUser = usuarioRepository.BuscarCuentaPorCorreo(filterContext.HttpContext.User.Identity.Name);
            string[] userRoles = usuarioRepository.GetRolesForUser(loggedInUser.UsuarioId);

            foreach (string definedRole in this.Roles.Split(','))
            {
                foreach (string role in userRoles)
                {
                    if (definedRole.Equals(role))
                        return;
                }
            }

            throw new SecurityException("Access not granted!");    
        }
        else
        {
            throw new SecurityException("Access not granted!");    
        }
    }
}

Теперь мой вопрос: каков предпочтительный способ перенаправления на неавторизованную страницу? Должен ли я внедрить себя в HttpContext и выполнить перенаправление? Какова проверенная модель для этого? Я просто хочу, чтобы "Несанкционированная" страница была поймана всеми.

1 Ответ

2 голосов
/ 24 января 2012

Вместо наследования от ActionFilterAttribute вы должны наследовать от AuthorizeAttribute.

Этот вопрос содержит код, который похож на то, что вы пытаетесь сделать, и тип возвращаемого значения - логическое значение true или false.

...