Bitwise rechten systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Rolf -

Rolf -

20/03/2012 13:35:17
Quote Anchor link
Hee allemaal,

Ik ben nu bezig met een rechten systeem. Ik heb er al het een en ander over opgezocht en kwam bij de volgende uit:
http://www.phphulp.nl/php/tutorial/beveiliging/bitwise-rechten-systeem/633/

Dit is een bitwise rechtensysteem. Dit wil ik eigenlijk toe gaan passen in combinatie met rollen.

Ik heb hier eigenlijk drie vragen over:
- Als ik in een database gewoon het getal zet van de rechten van de gebruiker, hoe kan ik dan terug rekenen naar wat de verschillende rechten zijn? Of is het het makkelijkst om dit gewoon in een tabel te zetten?

- Als ik met rollen ga werken wil ik het volgende. Personen krijgen een rol en aan de hand van deze rollen krijgen ze de rechten om ook klanten van personen te zien die een lagere rol hebben dan zijzelf.

Bijvoorbeeld:
Een manager kan zijn eigen klanten zien en de klanten van de personen die een rol hebben die lager is dan die van hemzelf. Maar deze manager kan geen klanten zien van de directie omdat deze een hogere rol heeft dan de manager.

Dit is toch het makkelijkste op te lossen d.m.v. elke gebruiker een rol toe te kennen en dan via het bitwise rechtensystem een recht aan te maken en via dit recht te zeggen: deze persoon mag klanten zien die lager zijn dan hijzelf?

- Klopt het ook dat dit systeem vrij statisch is? Dus dat er niet zomaar een rol of recht toegevoegd kan worden? Want als er een rol of recht toegevoegd wordt zal dit toch altijd verwerkt moeten worden in de php code?

Ik hoop dat het duidelijk is en dat jullie mij kunnen helpen ;)

Alvast bedankt!
 
PHP hulp

PHP hulp

18/10/2024 09:26:20
 
Rolf -

Rolf -

23/03/2012 12:43:17
Quote Anchor link
Iemand?
 
- SanThe -

- SanThe -

23/03/2012 13:36:53
Quote Anchor link
Gaat dit alleen over inkijken? Of ook over read/write/edit/delete etcetera?
 
Rolf -

Rolf -

23/03/2012 13:46:16
Quote Anchor link
Ook over read/write/edit/delete en nog wat dingetjes inderdaad.
Maar het probleem met klanten inzien van personen die een lagere rol hebben dan jezelf is alleen zo op te lossen denk ik toch?

En hoe kan ik het makkelijkste die rechten overzichtelijk maken? Als je bijv. 1 = lezen; 2 = wijzigen; 4 = verwijderen hebt en iemand heeft de rechten 6 is het dan het makkelijkste uit te lezen door een koppeltabel aan te maken waar dan instaat:
gebruikerid | rechtid
1 | 2
1 | 3

of is er een makkelijkere manier?
 
- SanThe -

- SanThe -

23/03/2012 13:50:25
Quote Anchor link
Iemand heeft rechten 6
1 = lezen; 2 = wijzigen; 4 = verwijderen (trouwens niet logisch bedacht want hoe kan je wijzigen zonder dat je het kan lezen)
Maar:
6 & 4 => 4 dus recht 4
6 & 1 => 0 geen recht 1
 
Rolf -

Rolf -

23/03/2012 13:56:46
Quote Anchor link
Nee was ook maar even een voorbeeld. Maar jij zegt dus dat ik via de phpcode moet terugrekenen welke rechten iemand heeft?
Dus van die 6 het hoogste getal aftrekken wat eraf kan en dan telkens doen totdat ik de rechten overhoudt?
 
Kris Peeters

Kris Peeters

23/03/2012 13:57:28
Quote Anchor link
Je kan gemakkelijk rekenen met flags (bitwise dinges...).

Ik denk wel dat je die in 1 veld kunt zetten.

Wat logica betreft, heb je ook heel leuke wapens.
Werk met defines, dan ziet het er heel leesbaar uit.

Ik zal eens zien of ik een klein voorbeeld kan tonen
 
Rolf -

Rolf -

23/03/2012 13:58:54
Quote Anchor link
Graag want ik vind het een moeilijk onderwerp. Dus ik weet niet precies wat je bedoelt met flags :p
 
- SanThe -

- SanThe -

23/03/2012 14:03:52
Quote Anchor link
Rolf - op 23/03/2012 13:56:46:
Dus van die 6 het hoogste getal aftrekken wat eraf kan en dan telkens doen totdat ik de rechten overhoudt?


Nee, ik doe een (bitwise) AND.
 
Rolf -

Rolf -

23/03/2012 14:06:16
Quote Anchor link
Wat ik hier dan nog mee wil (en zelf niet zo goed snap) is het uitlezen van de rechten die de gebruiker al heeft.

Dus er komt een pagina waar de details van de gebruiker staan. Dus ook welke rechten hij/zij al heeft. Hoe kan ik deze het makkelijkste uitlezen? Mijn eerste gedachte was om dit via een koppeltabel te doen maar dit moet makkelijker kunnen lijkt me?

Snap je wat ik bedoel?
 
Kris Peeters

Kris Peeters

23/03/2012 16:55:46
Quote Anchor link
Bekijk dit eens.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// de defines
define ('LOGGED_IN',    bindec ('0001'));
define ('CONTRIBUTOR',  bindec ('0010'));
define ('MODERATOR',    bindec ('0100'));
define ('ADMIN',        bindec ('1000'));

// volgende gegevens zouden normaal in een db staan
$rights_John    = bindec ('1000');
$rights_Blogger = bindec ('0011');


// indien enkel moderatoren (of hoger) toelating hebben ...
if ($rights_John >= MODERATOR) {
  echo 'John is moderator or more<br/>';
}


// specifiek recht testen.  Zijn die jongens Contributer?

if ($rights_John & CONTRIBUTOR) {  // bitwise AND
  echo 'John is contributor<br/>';
}

if ($rights_Blogger & CONTRIBUTOR) {  // bitwise AND
  echo 'Blogger is contributor<br/>';
}

?>


Met een bitwise AND kan je dus direct controleren of de gebruiker die ene vlag bevat.
Indien je nog wat logica zet in de volgorde van de vlaggen, kan je simpel met < en > beginnen rekenen.

Wanneer je met defines werkt, maak je de boel nog eens leesbaar.

Tja ... het is allemaal een kwestie van binair rekenen. Wat lastig om het verhaal van de vlaggen uit te leggen ...

Bedenk vooral dat je een systeem hebt waarbij de ene waarde de andere niet in de weg zit.
Je kan elk onderdeel op 1 of 0 zetten.

Google een "dip switch". Het gaat om zo'n logica.
Gewijzigd op 23/03/2012 16:57:12 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.