[PHP] system uprawnien uzytkownika

0

potrzebuje zrobic jakis w miare pristy system uprawnien uzytkownika. tzn mamy jakies grupy uzytkownikow typ user, mod i admin. i na podstawie grupy chce sprawdzac, czy dany uzytkownik ma prawo z korzystania z danej opcji, np dodawania newsow. problemem polega na tym, ze nie mam pomyslu, jak zapisywac te uprawnienia dla danej grupy. bo np wiadomo, admin ma wszystkie uprawnienia, a np jakis tam mlodszy admin moze wszystko, oprocz banowania adminow. a jakis jeszcze inny uzytkownik, moze to co inny, ale dodatkowo moze miec inna opcje. czyli chodzi mi o jakies takie zaleznosci, miedzy uzytkownikami. dzidziczenie uprawnien itp.

0

Nie napisałeś, w jakim języku. W ASP.NET masz to gotowe "out of the box".

Ogólnie to co chcesz zrobić, to tak zwana lista ról i uprawnień. Spróbuj poszukać pod takim kątem.

0

sorry, chodzilo mi o PHP. jedyne co znalazlem, to opis API w roznych frameworkach typ Zend. nie chce analizowac ich kodu, bo maja troche zbyt namieszane. ja potrzebuje czegos prsotego.
nie zamierzam zmienaic w trakcie dzialania skryptu tych uprawnien, wiec nie potrzebuje funkcji dodajacych/usuwajacych uprawnienia. chodzi mi tylko o format zapisu. np jak to rozmiscic w tablicy i tyle. chcialem dawac po przecinku, ze np: $access['user'] = 'view_news, edit_own_profile' itp, ale wtedy jest problem, bo nie wiem, co dac dla admina, zeby bylo, ze masz wszystkie uprawnienia.

0

Walnij np. taką tablicę:
$_PRIVILEGES['can_write_news'] = false;
$_PRIVILEGES['can_edit_own_profile'] = true;

itd...

0

no wlasnie tak nie moze byc, bo co bedzie mial admin? admin moze wszystko. a jakis mlodszy admin moze wsztstko oprocz np zbanowania admina. generalnie chodzi mi o dziedziczenie uprawnien. chce to rozwiazac w miare wydajny sposob.

0

A może zwyczajne odwołanie do tabeli sql, w której to każdy użytkownik miałby swój poziom uprawnien? Na jego podstawie powstawałaby strona z dostępnymi/niedostępnymi elementami. Dziedziczenie- prosta sprawa, podczas nadawania uprawnien wystarczy oznaczyć górną granicę nie wyższą niż uprawnienia osoby uprawniającej.
Oczywiście takie rozwiązanie będzie ok, jeżeli jest dostęp do bazy danych.

0

ja kiedyś miałem w skrypcie coś takiego (przykładowo):

// przywileje
define('PRIV_NONE', 0);
define('PRIV_VIEW', 1);
define('PRIV_REGISTER', 1 << 1);
define('PRIV_LOGIN', 1 << 2);
define('PRIV_EDIT_OWN_PROFILE', 1 << 3);
define('PRIV_EDIT_PROFILE', 1 << 4);
define('PRIV_BAN', 1 << 5);
define('PRIV_BAN_ADMIN', 1 << 6);
define('PRIV_ADD_ADMIN', 1 << 7);

// grupy
define('GRP_BANNED', PRIV_NONE );
define('GRP_NORMAL', PRIV_VIEW | PRIV_REGISTER | PRIV_LOGIN );
define('GRP_LOGGED', (GRP_NORMAL | PRIV_EDIT_OWN_PROFILE) & ~PRIV_REGISTER & ~PRIV_LOGIN );
define('GRP_MOD', GRP_LOGGED | PRIV_EDIT_PROFILE | PRIV_BAN );
define('GRP_ADMIN', GRP_MOD | PRIV_BAN_ADMIN | PRIV_ADD_ADMIN );

// przydzielenie praw:
$privileges = GRP_LOGGED;

// sprawdzenie przywileju:
if($privileges & PRIV_EDIT_PROFILE){
  echo 'Możesz edytować swój profil';
} else {
  echo 'Nie możesz edytować tego profilu';
}

ograniczenie że w 32 bitowej liczbie można zapisać tylko 32 przywileje, ale za to można te przywileje bez problemu zapisywać / odczytywać z bazy bez żadnego serializowania czy czegoś
dodawanie przywileju to po prostu:

$priv += PRIV_JAKIS;
lub bezpieczniej:
$priv |= PRIV_JAKIS;

a usunięcie to:
$priv -= PRIV_JAKIS;
lub bezpieczniej:
$priv &= ~PRIV_JAKIS;
lub:
$priv ^= PRIV_JAKIS;

  • to ostatnie to "przełączenie" stanu, więc trzeba znać poprzedni żeby wiedzieć co się robi

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