ForgeOpenPlatform
bg

OpenPlatform

Потребители, групи и права в OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

OpenPlatform разделя кой (потребители), къде (приложения) и какво (права), с групите по средата:

  • Потребителят има име, имейл, език, парола и флагове (sa за администратор, isconfirmed, isdisabled, isinactive, notifications, sounds...) и принадлежи към произволен брой групи (схема @User, plugins/setup/schemas/users.js).
  • Групата има име, цвят, икона, незадължителен reference и списък с права (схема @Group, plugins/setup/schemas/groups.js).
  • Приложението декларира собствени права: всяко има име и value, обикновен низ, който приложението разбира (plugins/setup/schemas/apps.js).

Как се изчислява достъпът

Функцията FUNC.permissions(userid, callback) в definitions/func.js изгражда за потребителя:

  1. групите на потребителя, които не са деактивирани;
  2. редовете на tbl_group_permission на тези групи: ред с право дава това право на приложение, а ред без право дава само приложението (потребителят го вижда и получава празен списък с права);
  3. value на всяко дадено право, само за приложения, които не са премахнати и не са деактивирани.

Резултатът има три части: приложенията на потребителя (apps), стойностите на правата по приложения (permissions) и групите (groups). Съхранява се като JSON в колоната cache на потребителя, с cachefilter, който изброява групите (G<id>) и приложенията (A<id>), от които зависи. Когато една група или приложение се промени, FUNC.clearcache(id) изчиства кеша на всеки потребител, чийто филтър съдържа този идентификатор, а следващата заявка го изгражда отново.

Къде го вижда приложението

  • Порталът изброява само приложенията в apps и отказва да отвори което и да е друго ("App not found").
  • Приложението получава собствения си списък в permissions, когато проверява стартиране (масив от низове value), заедно с идентификаторите на групите, за да може да реши какво да покаже (как се свързва едно приложение).
  • Екранът за настройка решава кой може да го използва чрез флага sa на потребителя.

Добър навик, който следва от начина, по който работи кодът: наименувайте value на правото по действието във вашето приложение (orders.read, orders.write) и свържете групите с тези стойности в OpenPlatform, така че приложението ви да проверява само низове.