Skip to main content

Automatizované nastavování práv pro uživatele či skupinu, přes DB

Otázka

Jak automatizovat nastavování práv pro uživatele či skupinu, přes DB?

image-1691050271761.png

Odpověď

EaInfoport má dvě tabulky pro osobní oprávnění (uživatel a skupina). Pro uživatele se tabulka jmenuje `package_access_user` a pro skupiny `package_access_group`. 

Popíšu zde postup pro skupiny, protože primárně doporučujeme nastavovat oprávnění pro skupiny, ale pro uživatele je postup obdobný. 

Pro zápis do této tabulky jsou pro nás důležité 4 hodnoty. ID skupiny, ID repozitáře, GUID package(balíčku), ID oprávnění. 

ID skupiny si můžeme vytáhnout například podle jména skupiny: 

SELECT g.Id
FROM AspNetGroups g
WHERE g.Name = 'Jméno skupiny';

ID repozitáře si můžeme vytáhnout například podle jména repozitáře:

SELECT r.Id
FROM Repositories r
WHERE r.Name = 'Jméno repozitáře';

Výpis ID oprávnění pro každý typ:

  • Owner má ID 1
  • Read má ID 5
  • Edit má ID 6
  • Review má ID 8
  • Delete má ID 10

Pozor! GUID balíčku se musí nacházet v našem vybraném repozitáři! 

Insert script, který zapíše Read oprávnění pro skupinu 'Jméno skupiny'  v repozitáři 'Jméno repozitáře' na balíčku s GUID '{00GUID00-0000-0000-0000-000PACKAGE00}'. Sloupeček Access ignorujeme, nastavujeme 0.

INSERT INTO `infoport`.`package_access_group` (`GroupId`, `Access`, `RepositoryId`, `Package`, `RelationTypeId`) VALUES (
  (SELECT g.Id
	FROM AspNetGroups g
	WHERE g.Name = 'Jméno skupiny'),
  0,
  (SELECT r.Id
	FROM Repositories r
	WHERE r.Name = 'Jméno repozitáře'),
  '{00GUID00-0000-0000-0000-000PACKAGE00}', '5');

Pro uživatele bude postup stejný, ale budeme zapisovat do tabulky `package_access_user` a budeme vybírat ID uživatele z tabulky AspNetUsers.

Defaultní oprávnění najdeme v tabulce `package_acess`. Důležité jsou sloupečky Package, RepositoryId, DefaultReadAllowed. 

  • Do Package se vložen Guid balíčku
  • RepositoryId obsahuje číslo repozitáře v kterém se balíček nachází
  • DefaultReadAllowed je sloupec pro defaultní čtení. 1 značí, že je čtení povoleno. 0 značí, že je čtení zakázáno. Null značí, že se čtení dědí z Parenta.

Rooty musí mít nastavené default pro DefaultReadAllowed! Nesmí obsahovat Null!

image-1727859185695.png

Scripty jsou udělané pro MySQL.

Popíšu zde také popis vyhodnocování, aby nenastala záměna.

Osobní oprávnění vždy aplikuje negaci na nastavené defaultní oprávnění!

Podívejme se na tento jednoduchý příklad. Balíček 1 má dva podřadné balíčky 2 a 3.

Snímek obrazovky 2024-08-09 134909.png

Pokud máme nastaveno na balíčku 1 defaultní čtení povoleno a na balíček 2 spustíme INSERT osobního oprávnění na čtení, tak EaInfoport vypočítá pro danou skupinu/uživatele na balíčku 2 zákaz.

Dále pokud máme nastaveno na balíčku 3 defaultní čtení zakázáno a spustíme INSERT osobní oprávnění na čtení, tak EaInfoport vypočítá pro danou skupinu/uživatele na balíčku 3 čtení.