Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System uprawnień oparty o flagi bitowe
Ultear
post 1.03.2015, 22:30:51
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 3
Dołączył: 9.12.2013

Ostrzeżenie: (0%)
-----


Witam,

Ostatnio zacząłem się dokształcać w zakresie operacji na bitach i chciałem w ramach treningu napisać prosty system uprawnień użytkowników oparty na flagach bitowych.

Posiadam 2 tabele w bazie danych, w skrócie:

Users:
id int UNSIGNED NOT NULL auto_increment,
group_id int UNSIGNED NOT NULL,
username varchar(32) NOT NULL

Groups:
id int UNSIGNED NOT NULL auto_increment
name varchar(32) NOT NULL,
permissions tinyint(8) NOT NULL


Do tabeli groups wprowadziłem dane:
// Unactivated - 00000000
// User - 01000111
// VIP - 11111001

1 - Opcja 1
2 - Opcja 2
4 - Opcja 3
8 - Opcja 4
16 - Opcja 5
32 - Opcja 6
64 - Opcja 7
128 - Opcja 8

Jak sprawdzić, czy user z grupą "VIP" ma włączoną opcję 4, a user z opcją User ma opcję 7? Dla różnych grup będzie inna suma bitów w systemie dziesiętnym reprezentująca daną opcję, od jakiej strony do tego podejść?

Z góry dziękuje za pomoc

@EDIT

Wynalazłem sposób poprzez shiftowanie bitów tzn:

  1. if(00000111 & (1<<0)){
  2. echo 'dostep przyznany';
  3. }


Tylko, czy jest to najlepsze wyjsce?

Ten post edytował Ultear 2.03.2015, 00:08:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
nospor
post 2.03.2015, 07:40:29
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak chcesz sprawdzic, czy user ma opcje 3 to robisz poprostu:

if (($zmBitowa & 4) == 4) echo 'Tak, ten koles ma opcje 3';
http://nospor.pl/opcje-dwuwartosciowe-przechowywanie.html


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 22:48