Χρήστες, ομάδες και δικαιώματα στο OpenPlatform
Το OpenPlatform διαχωρίζει ποιος (χρήστες), πού (εφαρμογές) και τι (δικαιώματα), με τις ομάδες στη μέση:
- Ένας χρήστης έχει όνομα, email, γλώσσα, κωδικό και σημαίες (
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, ώστε η εφαρμογή σας να ελέγχει μόνο συμβολοσειρές.