Атрибут Authorize не работает с ролями MVC C # - PullRequest
1 голос
/ 30 ноября 2010

Я сейчас модифицирую систему, написанную на c # MVC.

Я только что добавил дополнительную функциональность в область «Администратор», которая позволяет администратору создавать учетную запись пользователя с ограниченными функциональными возможностями администратора.Я поместил следующее на каждый из контроллеров для новой функциональности:

[Authorize(Roles = "Administrator")]

Однако, если я войду в систему, используя ограниченную учетную запись администратора, и перейду на эту страницу, она пропустит меня.

Я в замешательстве, потому что я, кажется, делаю это правильно, но я также довольно новичок в MVC, есть ли что-то еще, что я могу проверить?Я ничего не изменил в файле web.config, так что все должно быть в порядке.

Я знаю, что выше ограниченная информация, не ищу готового решения, больше советов о том, что я могу проверить, чтобы исправитьпроблема.

спасибо

РЕДАКТИРОВАТЬ:

Так была создана новая роль / учетная запись.Иди спокойно, это первая попытка рва, проверки не так много.

[Authorize(Roles = "Administrator")]
    [HttpPost]
    public ActionResult AddSalesManager(App.Web.Areas.Administrator.Models.SalesManager model, FormCollection formValues)
    {
        if (formValues["Cancel"] != null)
        {
            return RedirectToAction("Index");
        }

        if (!string.Equals(model.password, model.confirmpassword))
        {
            ModelState.AddModelError("password", "Password and Confirmation must match");
        }

        if (ModelState.IsValid)
        {
            using (ModelContainer ctn = new ModelContainer())
            {
                // First, create the user account inside the ASP.Net membership system.
                //

                Membership.ApplicationName = "App";
                Roles.ApplicationName = "App";

                if (!Roles.RoleExists("LimitedAdmin"))
                    Roles.CreateRole("LimitedAdmin");

               // MembershipCreateStatus createStatus = MembershipService.CreateUser(model.email, model.password, model.email);
                if (Membership.GetUser(model.email) == null)
                {
                    Membership.CreateUser(model.email, model.password);
                    Roles.AddUserToRole(model.email, "LimitedAdmin");
                }

            }
        }
        return RedirectToAction("Index");

    }

Ответы [ 2 ]

3 голосов
/ 28 октября 2015

Атрибут роли

 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class PermissionsAttribute : ActionFilterAttribute
{
    private readonly PermissionsType required;

    public PermissionsAttribute()
    {
    }

    public PermissionsAttribute(PermissionsType required)
    {
        this.required = required;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Log("OnActionExecuting", filterContext.RouteData);

        HttpSessionStateBase session = filterContext.HttpContext.Session;
        Controller controller = filterContext.Controller as Controller;

        //This is uesd to  redirect to same controller but differnect action
        // controller.HttpContext.Response.Redirect("./Login");

        var rjasthan = filterContext;


        var URK = filterContext.HttpContext.Request.RawUrl;
        if (session["UserPermissions"] != null)
        {
            if (!CheckPermissions((UserPermission)session["UserPermissions"]))
            {
                // this is used to signout from sesssion
                //  filterContext.HttpContext.GetOwinContext().Authentication.SignOut();

                filterContext.Controller.TempData["AuthenticationMessages"] = "You are not authorized to access";

                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary{
                             { "controller", "Home" },{ "action", "UnAuthorizeAccess" }});

            }
        }

        base.OnActionExecuting(filterContext);

    }

    protected bool CheckPermissions(UserPermission model)
    {
        bool result = false;

        if (this.required == (PermissionsType.Add))
        {
            if (model.AddRight)
                result = true;
        }
        else if (this.required == (PermissionsType.View))
        {
            if (model.ViewRight)
                result = true;
        }
        else if (this.required == (PermissionsType.Edit))
        {
            if (model.EditRight)
                result = true;
        }
        else if (this.required == (PermissionsType.Delete))
        {
            if (model.DeleteRight)
                result = true;
        }
        else if (this.required == (PermissionsType.View | PermissionsType.Edit))
        {
            if (model.ViewRight && model.EditRight)
            {
                result = true;
            }
        }
        else if (this.required == (PermissionsType.Add | PermissionsType.Edit))
        {
            if (model.AddRight && model.EditRight)
            {
                result = true;
            }
        }


        return result;
    }

    private void Log(string methodName, RouteData routeData)
    {
        var controllerName = routeData.Values["controller"];
        var actionName = routeData.Values["action"];
        var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
        Debug.WriteLine(message, "Action Filter Log");
    }
}

[Flags]
public enum PermissionsType
{
    View = (1 << 0),
    Add = (1 << 1),
    Edit = (1 << 2),
    Delete = (1 << 3),
    Admin = (View | Add | Edit | Delete)
}



 [Permissions(PermissionsType.Add)]
    public ActionResult Register()
    {
        return this.AjaxableView();
    }
2 голосов
/ 30 ноября 2010

Что вы ожидаете от этого кода?

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

...