Panel administracyjny - logowanie

0

Witam, aktualnie robię logowanie do panelu administracyjnego w MVC i mam taki problem.
Przede wszystkim utworzyłem nowy obszar "PanelAdministracyjny" i tam kontroler "Account" z metodami do logowania. Niestety, mając kontroler **"Admin" **w której mam metodę **Index **oznaczoną Authorize, to po jej wywołaniu przekierowuje mnie do logowania do strony głównej. Jak to rozwiązać? Dałem w web.config w obszarze

<location path="PanelAdministracyjny/Account/Login">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

lecz to nic nie pomaga. Używam SimpleMembership do logowania.
Screnny z obecnej pracy. Mam nadzieję, że znajdzie się osoba która pomoże ;)

Pozdrawiam

0

Jeśli nie chcesz, aby prosiło o zalogowanie, to usuń ten Authorize, innego wyjścia nie ma.

0

Nieeee, musi się jakoś dać, przecież tak tego zostawić nie można :D

0

Ale jak zostawić? :|

Jeśli chcesz mieć stronę z dostępem dla niezalogowanych użytkowników, to nie możesz mieć Authorize, które służy do ograniczania dostępu. I nie da się manipulować dostępem do kontrolerów/akcji za pomocą web.configa, bo to nie są fizyczne ścieżki.

Co Ty właściwie chcesz osiągnąć, bo chyba nie bardzo rozumiem?

0

Mam na stronie głównej panel do logowania dla użytkowników (sklep internetowy), po zalogowaniu można wykonywać zakupy itp. Ktoś kto wchodzi na stronę niezalogowany i chce kupić dany towar to automatycznie przekieruje go do panelu logowania.
A teraz o co mi chodzi.
Mam panel administracyjny. Do niego mam oddzielny panel logowania. Jeżeli ciekawscy internauci nie będą ciekawi co kryje się pod adresem www.panelAdministracyjny/Index lub pod jakimkolwiek w tym stylu adresie to spoko, lecz chcę aby ktoś kto wszedł w taki link był przekierowany do panelu logowania administracyjnego, nie do tego panelu w którym logują się użytkownicy aby wykonać zakup towaru.
Myślałem, że obszar z nowym kontrolerem odpowiedzialnym za logowanie załatwi sprawę, lecz gdy wpiszę w przeglądarkę np www.panelAdministracyjny/Index no to przekierowuje mnie do logowania na stronę główną.

1

No teraz wszystko jasne.

Najprostsze rozwiązanie, jakie przychodzi mi do głowy, to jeden główny kontroler logowania skonfigurowany w web.configu, który sprawdza, którego area dotyczy request (gdzieś w Request to powinno siedzieć, jak nie to trzeba po prostu parsować URL żądania), i na tej podstawie przekierowuje do odpowiedniego kontrolera.

Możesz też napisać swój własny atrybut dziedziczący z AuthorizationAttribute rozbudować go o pole z adresem formularza logowania, i przeciążyć metodę OnAuthorization, tak aby przekierowywała pod ten adres.

1

Mam rozwiązanie, bardzo proste a co najważniejsze dobre :)

public class CustomAuthorization : AuthorizeAttribute
    {
        public string LoginPage { get; set; }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.HttpContext.Response.Redirect(LoginPage);
            }
            base.OnAuthorization(filterContext);
        }
    }

następnie oznaczamy metody do których mamy mieć dostęp po zalogowaniu, w moim przypadku była to jedna cała klasa i jedna metoda.

[CustomAuthorization(LoginPage = "~/PanelAdministracyjny/Account/Login")]
    public class AdminController : Controller

oraz

[HttpPost]
        [Route("Produkt/{productId:int}")]
        [CustomAuthorization(LoginPage = "~/Logowanie")]
        public ActionResult ProductDetails(ProductDetailsViewModel model)

1 użytkowników online, w tym zalogowanych: 0, gości: 1