![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałbym się dowiedzieć, jak rozwiązalibyście problem struktury uprawnień w CMS'ie. Potrzebuję Waszych opini, gdyż sam piszę takiego CMS'a (jak chyba większość osób, które znają lepiej php (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ). Jak rozwiązać przydzielanie uprawnień do użytkowników? Tzn. chcę np. nadawać uprawnienia w stylu dodawanie wiadomości, dodawanie artykułów (z możliwością nadawania uprawnień do zapisu, odczytu, lub edycji dla poszczególnych kategorii). Jak rozwiązać uprawnienia grup i na jakiej zasadzie oprzeć ich dziedziczenie ? Proszę o Wasze opinie, napewno będą one pomocne. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 1 Dołączył: 15.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
To jest naprawde twardy orzech. To musi byc jak najbardziej dynamiczne, system nie musi miec newsow a musi wiedziec jakie uprawnienia mozna przydzielic userowi dla danego modulu.
Zastnanawialem sie nad definiowaniem rodzajow uprawnien w samym module i ich przporzatkowywanie do danych operacji w owym module - system moglby je odczytywac i na ich podstawie przydzielac uprawnienia (ktore definiuje osoba do tego uprawniona) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 31.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Wam. Narazie wykombinowałem coś takiego:
i baza danych:
Skrypt korzysta z ADODB i bez tego nie ruszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Proszę o opinie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 1 Dołączył: 15.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jezeli dobrze do konca zrozumialem to nic tutaj nie wnosi albowiem nie chodzi o news czy artykul a dowolny modul i dowolna akcje - to nie musi byc dodawanie czy edycja - chce zaistalowac modul i miec mozliwosc nadania uprawnien userowi, ktore udostepnia mi dany modul - to rozwiazanie napenwo jest dobre ale dla zdefiniowanego systemu.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Uhmn, ten wielki kod tutaj nic nie daje bo kwestia nie jest w implementacji tylko w projekcie. Typowym grzechem w php jest przeskoczenia na zasadzie hurra do kodowania i mówienie "patrzcie, to jest mój projekt systemu". Programiści php przejawiają zadziwiającą, masochistyczną ochotę to zaglądania w (cudzy co gorsza) kod, który robi im za projekt, analizę, a nawet specyfikację wymagań (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Może przydałby się artykuł o UML...
Ale do rzeczy. Dobry system uprawnień powinien mieć definiowalne, zagnieżdżalne grupy. A nie na sztywno userzy, moderatorzy, admini... koniec. Bez sensu, nieelastyczne i bardziej złożone. Dobry system uprawnień nie powinien mieć wbudowanych na sztywno uprawnień typu "może dodawać artykuły", "może edytować artykuły"... Robi się tego potwornie dużo, a i tak wszystkiego sie nie pokryje. Dobry system uprawnień powinien IMHO mieć tylko jeden rodzaj uprawnień: <user> może/nie może <czynność>. Gdzie <user> to jest nasz user albo grupa, <czynność> to "tworzenie postów", "usuwanie postów", itd. Najprościej to zrobić gdy "tworzenie postów" jest po prostu obiektem. I tak dochodzę do tego do czego zawsze dochodzę, czyli do MVC, bo taki obiekt to wypisz wymaluj akcja :wink: . |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
W tym kodzie nie ma z góry zdefiniowanych grup. Wszystko można zmienić, ale narazie tylko z poziomu mysql, bo nie mam jeszcze konsoli admina napisanej. Grupy, użytkownicy i uprawnienia są nadane przypadkowo. Chodziło mi o waszą opinię na temat takiego rozwiązania (w tym wypadku przede wszystkich dziedziczenia uprawnień)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 1 Dołączył: 15.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mi sie owe rozwiazanie nie podoba, co wiecej lepiej byloby abys opisal sposob dzialania a nie wklejal caly kod wraz ze struktura tabel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tutaj raczej wazniejsze jest rozwiazanie, realizacja to juz najmniejsy problem. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Ja osobiscie mam podobny stosunek do hawk'a. Nie mozna na sztywno wpisywacdowolonych czynnosci.
Duzo wygodniej bedzie zbudowac tablice uprawnien. Uprawnienia, jesli juz chcesz dzielic.to podziel sobie uprawnienie na poziomy. Powiedzmy liczby od 1-4 gdzie 1 do podstawowe dostepy dla usera/grupy a 4 to pelna administracja. Tablice w bazie mozesz zrobic tak user_id|uprawnienie|modul. Tablica chyba jest w miare jazno opisana. Mozna do tego zrobic funkje/metode, ktora sprawdza uprawnienia w danym module. A w module administracyjnym bedziesz musial pamietac piszac zeby podzielic administracje na takie bloki. Im wiekszy poziom usera/grupt tym wiecej tych blokow pojawia mu sie. Zamiast pisac juz gotowe skrypty, przeanalizuj to i rozryzuj sobie zebys mogl sie pozniej, podczas pisania skryptu, mial na czym opierac. Życze powodzenia w pisaniu |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
Cytat Może przydałby się artykuł o UML...
A wiesz, że to nie głupi pomysł? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Napiszesz ? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 195 Pomógł: 0 Dołączył: 7.07.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Uhmn, ten wielki kod tutaj nic nie daje bo kwestia nie jest w implementacji tylko w projekcie. Typowym grzechem w php jest przeskoczenia na zasadzie hurra do kodowania i mówienie "patrzcie, to jest mój projekt systemu".
Kazdy jezyk typu user-friendly boryka sie z takimi problemami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Od siebie: Zagniezdzane grupy, elastyczne zestawy uprawnien podzielone na grupy (wiem, trudno to opisac) i nakladanie sie uprawnien - a'la Unix i dwustronne uprawnienia - a'la Windows definiuje dowolne grupy - ble, ble1, ble2 - z zagniezdzeniami, definiuje dowolne grupy uprawnien - jadro, news, forum - z zagniezdzeniami, kazdy uzytkownik moze miec uprawnienia in plus albo in minus. I potem jade po kolej: 1) pobieram grupy dla usera, jade od gory biorac uprawniania grupy na tablice uprawnien usera, jesli nastepna grupa nadpisuje cos, to nadpisuje to w tablicy, na koncu nakladam na to uprawnienia solowe uzytkownika i mam tablice uprawnien. Wiem, ze brzmi trudno, ale realizacja nie jest juz tak skomplikowana. Zaleta tego modelu (sprawdzone (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) jest wygoda w dodawaniu grup uprawnien modulow. Jesli tworzymy MMCMS (Massive Multiplayer CMS (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) ktory ma budowe Linuxa - jadro abstrakcyjne i setki mozliwych modulow do zaladowania to kazdy z tych modulow podczas instalacji moze zglaszac swoje grupy uprawnien (oznaczone sygnatura modulu - u mnie typu type.author.owner.name) dzieki temu w jadrze nie ma czegos takiego jak kontrola uprawnien do forum czy newsow czy innych galerii, a w momencie instalacji lub wlaczenia modulu dla serwisu te uprawnienia zostaja dodane do zestawu. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
a mi dziś wpadł do głowy prosty a zarazem bardzo elastyczny pomysł.
[sql:1:b9b96a4b2f]CREATE TABLE `cms_acces` ( `id` smallint(5) unsigned NOT NULL auto_increment, `module` varchar(30) NOT NULL default '0', `user_group` smallint(6) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `auth_admin` tinyint(2) NOT NULL default '0', `auth_rights` text NOT NULL, PRIMARY KEY (`id`), KEY `cat_id` (`module`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=19 ;[/sql:1:b9b96a4b2f] status zaaiwra info czy jest moduł jest włączony. `auth_admin` to sa pełne uprawniania, natomiast w `auth_rights` znajduje sie zserializowana tablica z uprawnainiami. np: [php:1:b9b96a4b2f]<?php $auth['auth_view']='1'; $auth['auth_add']='0'; $auth['auth_reply']='1'; $auth['auth_edit']='0'; $auth['auth_delete']='0'; var_dump($auth); foreach ($auth as $key=>$var){ echo $key.'-'.$var.'<br>'; } var_dump(serialize($auth)); ?>[/php:1:b9b96a4b2f] pozwala to na dostosowywanie uprawnień do każdego modułu indywidualnie. co o tym sądzicie?? |
|
|
![]()
Post
#13
|
|
Grupa: Przyjaciele php.pl Postów: 197 Pomógł: 0 Dołączył: 9.09.2003 Skąd: z Marsa Ostrzeżenie: (0%) ![]() ![]() |
Bora: nad IDENTYCZNYM rozwiązaniem pracuje od 2 tygodni... tylko że od półtora tygodnia mi sie nie chce nic w tym kierunku pisać..
ale dzieki temu uprawnienia sa dodawane dynamicznie razem z modulem... i każdy moduł moze mieć włąsne uprawnienia (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Problem pojawia sie dopiero gdy trzeba te uprawnienia sprawdzac ... np przy generowaniu menu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Pozdro |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
oradziłę soebie z tym.
Każdy moduł ma baze gdzie znajduje sie jego stan. Natomiast w w porównaniu z poprzednim rozwiązaniem zamiast auth_admin jest auth_view czyli czy user ma prawo ogl.ądać ten moduł. reszta znajduje sie już w tablicy zserializowanej. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 06:48 |