defineApplicationRole() (consultați Rolul implicit pentru funcții mai jos).
src/roles/restricted-company-role.ts
Securitate la nivel de rând
Permisiunile pentru obiecte și câmpuri decid ce obiecte și câmpuri poate accesa un rol. Predicate de permisiuni la nivel de rând merg mai departe și decid ce înregistrări poate vedea și asupra cărora poate acționa un rol — de exemplu, un rol de tip autoservire în care fiecare utilizator extern își vede doar propriile înregistrări. Declară predicate curowLevelPermissionPredicates în rol. La fel ca restul manifestului,
fiecare predicat are propriul universalIdentifier și face referire la un obiect și un câmp prin
universalIdentifier, un operand și (opțional) un câmp workspaceMember a cărui valoare este injectată
în momentul interogării — astfel încât poți exprima „relația de proprietar a înregistrării este membrul curent al spațiului de lucru”:
src/roles/partner-role.ts
Combinarea predicatelor cu grupuri
În mod implicit, predicatele unui rol sunt combinate cuAND. Pentru a combina unele dintre ele cu OR (sau pentru a
imbrica logica), declară o intrare rowLevelPermissionPredicateGroups și asociază fiecare predicat la aceasta prin
predicateGroupUniversalIdentifier. Acest rol permite unui partener să vadă o oportunitate pe care fie o deține,
fie pentru care este punctul de contact:
src/roles/partner-opportunities-role.ts
- Oferă fiecărui predicat și fiecărui grup un
universalIdentifierstabil (orice uuid) — acesta este cheia entității de-a lungul actualizărilor, iar predicatele fac referire la grupuri prin el. - Predicatele pot face referire la obiecte și câmpuri deținute de aplicația ta sau de obiectele standard ale Twenty.
- Securitatea la nivel de rând este aplicată pentru spațiile de lucru din planurile care o includ; predicatele se sincronizează în continuare pe alte planuri, doar că nu sunt aplicate.
Rolul implicit pentru funcții
Când generați o aplicație nouă, CLI creează un fișier de rol implicit declarat cudefineApplicationRole():
src/roles/default-role.ts
defineApplicationRole() este un wrapper subțire în jurul defineRole() care marchează rolul utilizat ca implicit pentru aplicația dvs. în momentul instalării. Validarea este identică cu defineRole, dar pipeline-ul de build conectează automat universalIdentifier în defaultRoleUniversalIdentifier din manifestul aplicației — astfel încât nu trebuie să îl referiți manual din defineApplication.
Notițe:
- Exact un
defineApplicationRole(...)este permis per aplicație — build-ul manifestului va eșua dacă găsește mai mult de unul. - Utilizați
defineRole()(nudefineApplicationRole()) pentru orice roluri suplimentare cu care este livrată aplicația. - Setarea explicită a
defaultRoleUniversalIdentifierîndefineApplication()este în continuare acceptată pentru compatibilitate retroactivă, dar este considerată învechită în favoareadefineApplicationRole().
Cele mai bune practici
- Porniți de la rolul generat de scaffolding, apoi restrângeți-l progresiv — rolul implicit acordă acces larg la citire, ceea ce rareori este de dorit în producție.
- Înlocuiți
objectPermissionsșifieldPermissionscu obiectele și câmpurile de care au nevoie efectiv funcțiile dvs. permissionFlagUniversalIdentifierscontrolează accesul la capabilități la nivelul platformei. Mențineți-le la minimum.- Vedeți un exemplu funcțional:
hello-world/src/roles/function-role.ts.