Toon posts:

Alternatief RBAC Model

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

Ik ben bezig met het maken van mijn CMS systeem, en wil daarbij een RBAC rechten systeem gebruiken. Daarvoor heb ik momenteel de volgende tabellen;
code:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
## Users
CREATE TABLE users
(
  u_id INT (7) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  u_name VARCHAR(255) NOT NULL default '',
  u_username VARCHAR(255) NOT NULL default '',
  u_password VARCHAR(32) NOT NULL default '',
  u_email VARCHAR(255) NOT NULL default '',
  u_active ENUM('Y', 'N')
  .....
  .....
) TYPE=MyISAM;

## Roles
CREATE TABLE roles
(
  r_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  r_name VARCHAR(255) NOT NULL default ''
) TYPE=MyISAM;

## Permissions
CREATE TABLE permissions
(
  p_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  p_name VARCHAR(255) NOT NULL default ''
) TYPE=MyISAM;

## UserRole
CREATE TABLE user_role
(
  u_id INT(7) UNSIGNED default '0',
  r_id INT(6) UNSIGNED default '0'
) TYPE=MyISAM;

## RolePermission
CREATE TABLE role_permission
(
  r_id INT(6) UNSIGNED default '0',
  p_id INT(6) UNSIGNED default '0'
) TYPE=MyISAM;


Nu is het probleem, dat als ik met die tabel een recht van een user wil controleren, moet ik na het vaststellen van de user kijken of hij bepaalde rechten heeft, bijv;
code:
1
2
3
4
if ( $user->hasPermission ('editArticle') )
{
    // Edit article
}


Nadeel van deze structuur is dat je bij het controleren van bepaalde rechten van te voren al MOET weten welke functies er zijn binnen de applicatie, en welke rechten, dus valt een heel groot deel van de flexibiliteit van het systeem weg, want je kunt dan niet later zeggen van "ik maak er nog een rol `translator` bij, want dan zou je ook de broncode weet aan moeten passen. Mijn vraag is dan ook, kan dit via RBAC ook nog op een andere manier, waarbij deze flexibiliteit er wel is?

Ik heb nu een aantal topics en artikelen gelezen op verschillende site's, maar hier kom ik niet uit.

MartijnG

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 07-05 16:18

Gerco

Professional Newbie

Misschien zoiets:

Codeer in je applicaties functiepunten:
code:
1
if(CheckFunction("News", Rights.Edit, relevante info als site, onderwerp, etc))


Ken functiepunten aan rollen toe en rollen aan gebruikers (rekening houdend met bovengenoemde extra info). Op die manier kan je klant zo rollen erbijverzinnen, het enige wat vast staat is welke dingen je kan gaan toestaan of verbieden, maar dat lijkt me niet zo raar, dat is immers wat je code doet.

Je code vraagt dus alleen: "Heeft deze gebruiker (add/edit/delete) rechten op functiepunt X voor site Y", waarbij X hetgene is wat die code wil gaan doen en Y de data waarme het dat wil doen. Je zal heel veel van die punten krijgen, maar dat is de prijs van flexibiliteit.

[ Voor 7% gewijzigd door Gerco op 25-04-2005 20:59 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Gerco schreef op maandag 25 april 2005 @ 20:58:
Misschien zoiets:

Codeer in je applicaties functiepunten:
code:
1
if(CheckFunction("News", Rights.Edit, relevante info als site, onderwerp, etc))


Ken functiepunten aan rollen toe en rollen aan gebruikers (rekening houdend met bovengenoemde extra info). Op die manier kan je klant zo rollen erbijverzinnen, het enige wat vast staat is welke dingen je kan gaan toestaan of verbieden, maar dat lijkt me niet zo raar, dat is immers wat je code doet.

Je code vraagt dus alleen: "Heeft deze gebruiker (add/edit/delete) rechten op functiepunt X voor site Y", waarbij X hetgene is wat die code wil gaan doen en Y de data waarme het dat wil doen. Je zal heel veel van die punten krijgen, maar dat is de prijs van flexibiliteit.
Dus wat je eigenlijk bedoelt;
"Heeft gebruiker Martijn rechten op artikelen voor site domein.nl"?

Als dit zo is, dan zou toch de database ook aangepast moeten worden, of denk ik dan te ver :+

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 07-05 16:18

Gerco

Professional Newbie

Je zou bijvoorbeeld kunnen zeggen dat gebruiker Martin bij sites domein.nl en ander.nl hoort, dan geef je die persoon rechten op artikelen op site nivo (je kunt verschillende nivos hebben, site of globaal bijv).

Martin heeft nu dus rechten op artikelen voor sites waar hij bijhoort (domein.nl en anders.nl). Als je nu een gebruiker aan een nieuwe site koppelt, hoef je heb geen extra rechten te geven. Nadeel hiervan is dat hij op alle sites dezelfde rechten zal hebben. Dit kun je voorkomen door die nivos weg te laten en de betreffende site in het "RoleUsers" (oid) record op te slaan.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
De roles horen helemaal niet vast te staan :). Je kijkt of een user een bepaald recht heeft, dus $user->can($Actions->Edit, 'Post'); waarbij can in de roles die de user kijkt, of deze user de permissie heeft om de actie en operatie uit te voeren.

Verwijderd

Topicstarter
PrisonerOfPain schreef op maandag 25 april 2005 @ 22:42:
De roles horen helemaal niet vast te staan :). Je kijkt of een user een bepaald recht heeft, dus $user->can($Actions->Edit, 'Post'); waarbij can in de roles die de user kijkt, of deze user de permissie heeft om de actie en operatie uit te voeren.
En waar staan de permissies dan weggeschreven? Dat deel snap ik nog niet helemaal ;)

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 23:29
Verwijderd schreef op dinsdag 26 april 2005 @ 14:49:
[...]


En waar staan de permissies dan weggeschreven? Dat deel snap ik nog niet helemaal ;)
Je kan eventueel ook beveiliging als een schil om je programma toevoegen door middel van aspects (AOP).

Twee interessante linkjes:
http://www.comp.lancs.ac....slowikowski_zielinski.pdf
http://hct.ece.ubc.ca/publications/pdf/gao-etal-2004.pdf

[ Voor 12% gewijzigd door Kwistnix op 26-04-2005 17:04 ]


Verwijderd

Topicstarter
FallenAngel666 schreef op dinsdag 26 april 2005 @ 17:02:
[...]


Je kan eventueel ook beveiliging als een schil om je programma toevoegen door middel van aspects (AOP).

Twee interessante linkjes:
http://www.comp.lancs.ac....slowikowski_zielinski.pdf
http://hct.ece.ubc.ca/publications/pdf/gao-etal-2004.pdf
Bedankt, maar dan krijg je een soort Windows effect :P Ik heb liever eerst een duidelijk RBAC rechtensysteem en daarna de rest van de appicatie :)
Pagina: 1