Kontrola dostępu czyli ACL w praktyce

ACLKontrola dostępu z angielska ACL (Access Control List) czyli kto? co może?

Prawie każdy serwis www który ma możliwość logowania się użytkowników musi mieć ACL. Co to jest i jak działa?
Można go podzielić na trzy elementy:

  • zasoby (resources) – dowolny element, to może być cała strona lub jej fragment (np. formularz) a nawet jedna litera
  • role (role) – połączenie między dozwolonymi zasobami a uprawnionymi użytkownikami
  • użytkownicy (users) – to nie trzeba tłumaczyć

Na początku przydziela się rolom zasoby. Na przykład roli „administrator” przydziela się wszystkie zasoby a roli „gość” tylko jedną stronę i jeden div na innej.
Potem przydziela się użytkownikom role.
Dzięki temu użytkownicy mający role „administratora” mogę zrobić wszystko a ci co są „gościami” mogę niewiele.

Przykład struktury bazy danych przechowujących dane ACL (można i powinno się tą strukturę zrobić optymlniej jeśli ma działać w jakimś serwisie ale to jest tylko przykład który ma naświetlić obraz):

CREATE TABLE  `resources` (
`resources_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`resources_name` VARCHAR( 128 ) NOT NULL ,
UNIQUE (
`resources_name`
)
) ENGINE = INNODB;

CREATE TABLE  `role` (
`role_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`role_name` VARCHAR( 128 ) NOT NULL ,
UNIQUE (
`role_name`
)
) ENGINE = INNODB;

CREATE TABLE  `users` (
`users_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`users_login` VARCHAR( 128 ) NOT NULL ,
`users_pass` VARCHAR( 128 ) NOT NULL ,
`users_realname` VARCHAR( 255 ) NOT NULL ,
UNIQUE (
`users_login`
)
) ENGINE = INNODB;

CREATE TABLE  `acl_resources_role` (
`acl_resources_role_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`resources_id` INT NOT NULL ,
`role_id` INT NOT NULL
) ENGINE = INNODB;

CREATE TABLE  `acl_users_role` (
`acl_users_role_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`users_id` INT NOT NULL ,
`role_id` INT NOT NULL
) ENGINE = INNODB;

(wersja uproszczona gdzie jeden użytkownik może mieć jedną rolę jest rezygnacja z tabeli acl_users_role i umieszczenie kolumny role_id w tabeli users)

i relacje, czyli powiązania między tabelami:

ALTER TABLE `acl_resources_role` ADD FOREIGN KEY ( `resources_id` ) REFERENCES `resources` (
`resources_id`
);

ALTER TABLE `acl_resources_role` ADD FOREIGN KEY ( `role_id` ) REFERENCES `role` (
`role_id`
);

ALTER TABLE `acl_users_role` ADD FOREIGN KEY ( `users_id` ) REFERENCES `users` (
`users_id`
);

ALTER TABLE `acl_users_role` ADD FOREIGN KEY ( `role_id` ) REFERENCES `role` (
`role_id`
);

1 thought on “Kontrola dostępu czyli ACL w praktyce

Comments are closed.