Потребители, групи и права в OpenPlatform
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 изгражда за потребителя:
- групите на потребителя, които не са деактивирани;
- редовете на
tbl_group_permissionна тези групи: ред с право дава това право на приложение, а ред без право дава само приложението (потребителят го вижда и получава празен списък с права); 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, така че приложението ви да проверява само низове.