![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 3 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam następujący problem: Mam zbudowany główny kontroler a po nim dziedziczą inne. W kontrolerach administratora są pewne metody możliwe do wywołania w zależności od rangi user-ów: I przykładwy kod (w zarysie) wraz z potrzebnymi uprawnieniami (rangi: zarejestrowany|edytor|administrator)
i kwestia w tym, że chciałbym te rangi sprawdzić ale nie wiem czy jest możliwość zrobienia tego nie bezpośrednio w każdej metodzie. Myślałem nad zmapowaniem kontrolerów i metod np w bazie, niemniej też natknąłem się na problemy i przede wszystkim zastanawiałem się nad optymalnym rozwiązaniem. Dodam jeszcze, że nie chce mieć zdeklarowanych na zewnątrz uprawnień do ogólnych metod, tzn. że wszystkie metody publich we wszystkich kontrolerach mogą być wykonywane tylko przez administratora. Chciałbym mieć to bardzo rozdzielone. Z góry dziękuję za sugestie i pozdrawiam!! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Witaj!
Pewnego razu też miałem taki dylemat w pewnej aplikacji. Pomimo tego, że to była aplikacja w asp.net mvc, ale mvc to mvc - wszędzie jest podobne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) A więc tak, zrobiłem klasę BaseController, która dziedziczyła po Controller i po której dziedziczyły wszyskie klasy kontrollera. Ta klasa (BaseController) miała za zadanie sprawdzenia czy użytkownik jest zalogowany, jaka jest jego rola itd... sprawdzała też czy zapytanie jest AJAX-owe czy też "normalne" itd.. Następnie stworzyłem atrybut ProtectedAction po czym poprostu oznaczłem metody akcji w kontrolerach takimi atrybutami i to było zautomatyzowane. Przykład: Kod class Dupa extends BaseController
{ [ProtectedAction] public ActionResult Index() { // tą metodę wykona tylko użytkownik zalogowany. W razie nie znalezienia sesji zalogowanego użytkownika, zostaje przekierowany na strone z logowaniem. } public ActionResult Costam() { // a tą metodę wykona każdy. } } |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 3 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Zastanawiałem się nad następującym rozwiązaniem ale nie wiem czy słusznie. Mój FrontController posiada interface, kontrolery admina implementują go i oczywiście dziedziczą po FrontControllerze. Myślałem nad następującą rzeczą. Napisanie klasy abstrakcyjnej typu: AdminContent, z typowimi metodami add, publish, remove, edit, update. W sumie tyle wystarczyłoby mi do obsługi różengo rodzaju zawartości np. news-y, strony statyczne, userzy, pliki etc. I właśnie w abstrakcyjnej klasie zdeklarować sprawdzanie uprawnień następnie dziedziczyć po niej a nie po FrontControllerze. Nie wiem czy jednak klasa abstrakcyjna byłaby odpowiednim rozwiązaniem. Oczywiście samo sprawdzanie uprawnień, mógłbym wstawić ręcznie gdyż obecnie panel posiada około 10 kontrolerów i średnio po 5 metod zardządziania poszczególnymi rodzajami zawartości. Niemniej wtedy, ograniczyłbym możliwość edycji uprawnień do poszczególnych działów panelu. Zastanawiałem się też nad tabelą w bazie tego typu: | id | nazwa_klasy | metoda | ---------------------------------- | 1 | AdminNews | addNews | oraz druga z przypisanymi uprawnieniami: | id | nazwa sekcji | admina | edytor | zarejestrowany_user | ------------------------------------------------------------------------ | 1 | 1 (id z pierwszej tabeli)| 1 | 0 | 0 | Prosze o sugestie nad lepszym rozwiązaniem, lub całkiem nowe. Dzięki i pozdrawiam. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) ![]() ![]() |
Dopisz sobie np. funkcję do której przekażesz poziom i nazwę funkcji. Jeżeli masz odpowiedni wpis np. w tablicy to zostaje udzielone zezwolenie. W przeciwnym wypadku wypisujesz błąd i stopujesz wykonywanie skryptu (exit;). Chyba najprostsze możliwe rozwiązanie. Tablicę tą oczywiście mógłbyś przykładowo wczytywać z pliku. I już.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 09:07 |