Потребителски права.

metal_head

Registered
Здравейте. Решил съм да направя система за различни привилегии на потребителите (администратори, модератори...ако щете vip потребители). Та за тази цел има два варианта, които ми идват на акъла. Вижте ги и ми кажете дали са добри идеи и дали има вече създаден стандарт за тези неща, който е най - добре да се използва.


Първия вариант (който е адски глупав и не бих го пробвал) е да направя още полета в базата данни от булев тип, които проверяват is_administrator = true/false примерно, но това за всичките привилегии ще трябва да се направи, което значи много полета.

Вторият вариант ми се струва по-логичен.
Да създам един стринг, който да изглежда примерно така:

U-V-A-P-S и в случая (така просто ми дойдоха) U е за user, V е, ако е vip, А е ако е администратор и така нататък. Ако е само обикновен потребител примерно ще изглежда така: U-N-N-N-N. Та после това нещо да се сплитва в един масив и да се взимат отделните буквички и така да се определят правата.

Има и трети вариант, който ми хрумва, но и той е глупав като първия - да използвам integer числа, с които да определям какъв е потребителя, но не мога да правя комбинации като при това със стринга.

Та някоя от идеите ми става ли, добра ли е или всичките ми подходи са грешни и има по-добро решение за това ? :)
 
Използвай си първият вариант в който ще имаш да кажем поле type което ще съдържа числа и просто ще правиш проверки какъв е типа:
type = 1 потребител
type= 2 модератор
type = 3 администратор
и по този начин ще ги проверяващ а дали е user няма смисъл защото ти така или иначе го караш да се регистрира за да си ползва привелегиите - може да направиш потребителя вип чрез сесия.
 
Еми примерно:
PHP:
if($row['type']==1) {
//потребител
} elseif($row['type']==2) {
//модератор 
} else {
//админ
}
 
Е да, ама така не мога да комбинирам права. За всяка комбинация от права ще трябва да си имам число. А иначе не ми трябват права "user" :D просто това ми дойде на акъла. Но вижте сега, спазвайки примера ми, който дадох горе ще ви дам вариант с комбинация от няколко права:

U-V-N-N-S - Това е потребител, който е....потребител :D, vip е и е суперпотребител (ако кажем, че "S" е за суперпотребител). При мен няма да има такива гъзарщини, но ще има различни администратори и модератори, тъй като сайта, който съм проектирал има 7 различни сектора, които са за различни неща. И примерно искам да има 7 групи модератори, като на някои от тях да им разрешавам да "администраторстват" в сектор "игри" и сектор "филми"... на други в сектор "фотография" и сектор "анимация"...такива неща.

А идеята ми после е да ги разцепя тия в един масив, като ще разцепвам ри символа "-" ..примерно...ако използвам тирета. После малко объркано става, защото ще трябва да си знам кой номер буква за какво е (и да, знам, че масивите почват от 0).
 
php fusion - добър пример е относно това как може да направиш права, разлгедай базата данни, ако не ти се занимава, нещо от сорта е.

Имаш база таблица с права, пишеш новини, коментари, банваш тнт.. и съответно за всеки потребител даваш отделен тип права или всичките.
 
Ами аз пробвах един тест със стринг, който е като този, с който давах примери:

Код:
$arr = split('[/.-]', "MASTER-A:G-A:AP-A:M-A:AN-A:3D-A:GD-A:F");
echo $arr[0]."<br>";
echo $arr[3];

...и това нещо си върна това, което очаквах, така че ще пробвам по този начин. Ще си направя една функция, която ще сглобява целия тоя стринг, за да си я ползвам от различни места и да се надявам, че ще успея. Важно ми беше мнението ви и щом и fusion ползва подобно, значи предполагам всичко е ОК
 
metal_head каза:
Е да, ама така не мога да комбинирам права. За всяка комбинация от права ще трябва да си имам число. А иначе не ми трябват права "user" :D просто това ми дойде на акъла. Но вижте сега, спазвайки примера ми, който дадох горе ще ви дам вариант с комбинация от няколко права:

U-V-N-N-S - Това е потребител, който е....потребител :D, vip е и е суперпотребител (ако кажем, че "S" е за суперпотребител). При мен няма да има такива гъзарщини, но ще има различни администратори и модератори, тъй като сайта, който съм проектирал има 7 различни сектора, които са за различни неща. И примерно искам да има 7 групи модератори, като на някои от тях да им разрешавам да "администраторстват" в сектор "игри" и сектор "филми"... на други в сектор "фотография" и сектор "анимация"...такива неща.

А идеята ми после е да ги разцепя тия в един масив, като ще разцепвам ри символа "-" ..примерно...ако използвам тирета. После малко объркано става, защото ще трябва да си знам кой номер буква за какво е (и да, знам, че масивите почват от 0).
Не е добра идея да пазиш такива неща като стринг , ще питаш защо ли еми ще трябва да правиш доста проверки с preg_match да проверяваш какви права се пращат да проверяваш дали някой не се опитва да промени стринга в дадената променлива,защото ако нямаш да кажем качествени preg_match проверки той ще си го промени и ще стане админ в раздел анимция - ако сведем нещата до 2 полета с номера и типове работата става значително по малка за теб, и за базата данни и за браузъра.
Защото на мен ми е по лесно да запиша число което 18 отколкото да хеширам всяка буква по отделни цифри,което се препокрива.
 

Back
Горе