Проверить разрешение пользователя для фильтра действий или фильтра авторизации?

0

Я разрабатываю веб-сайт в MVC4. Я разработал роли пользователей и разрешения.

Я хочу спросить, где я должен проверить доступ к разрешениям пользователя: в фильтре пользовательского действия или в фильтре пользовательской авторизации?

Если у пользователя нет доступа к модулю, я должен показать сообщение об ошибке тостера. Как показать это сообщение в фильтре действий?

  • 2
    Использовать атрибут авторизации - stackoverflow.com/questions/2504923/… . Дайте мне знать, если это поможет.
Теги:
asp.net-mvc
asp.net-mvc-5
asp.net-mvc-4
toastr

2 ответа

2
Лучший ответ

Я использую для написания атрибута фильтра пользовательских действий, так что при вызове действия этот метод вызывается, и я проверяю его, если роль пользователя позволяет ему вызывать это действие или нет.

Вы должны написать собственный атрибут фильтра действий таким же образом, но вам нужно написать свою собственную бизнес-логику в методе CheckAccessRight:

public class AuthorizationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string actionName = filterContext.ActionDescriptor.ActionName;
        string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;



        if (!CheckAccessRight(actionName, controllerName))
        {
            string redirectUrl = string.Format("?returnUrl={0}", filterContext.HttpContext.Request.Url.PathAndQuery);

            filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + redirectUrl, true);
        }
        else
        {
            base.OnActionExecuting(filterContext);
        }
    }


    private bool CheckAccessRight(string Action, string Controller)
    {
        if (HttpContext.Current.Session["userId"] != null)
        {
            string userID = HttpContext.Current.Session["userId"].ToString();
            using (var db = new cloud_clinicEntities())
            {
                assignment objAss = null;
                if (HttpContext.Current.Session["AccountType"].ToString() == "lab")
                {
                    objAss = db.assignments.SingleOrDefault(model => model.userid == userID);
                }
                else
                {
                    objAss = db.assignments.SingleOrDefault(model => model.employeeId == userID);
                }

                String UserRole = objAss.itemname;

                itemchildren objChild = db.itemchildrens.SingleOrDefault(model => model.parent == UserRole && model.child == Controller + " " + Action);

                if (objChild != null)
                {
                    return true;
                }
                else
                {
                    return false;
                }


            }
        }
        else
        {
            return false;
        }
    }
}

И затем используйте этот атрибут для следующих действий:

[AuthorizationAttribute]
        public ActionResult MyAction()
        {
        }
0

Вот хорошая статья. Вы можете установить свои собственные атрибуты для нескольких ролей, таких как admin.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню