# Χρήστες, ομάδες και δικαιώματα στο OpenPlatform

> Πώς φτάνει ένας χρήστης σε μια εφαρμογή στο OpenPlatform: οι ομάδες αποφασίζουν ποιες εφαρμογές βλέπει ο χρήστης και ποιες τιμές δικαιωμάτων λαμβάνει κάθε εφαρμογή.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: el
Content-SHA256: 772b1860be9e1f410f9330a6f2f3f3f819edcf1850e2de7c5ae50066da744d0e
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Το 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` χτίζει, για έναν χρήστη:

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`), μαζί με τα αναγνωριστικά των ομάδων, ώστε να αποφασίσει τι θα εμφανίσει ([πώς συνδέεται μια εφαρμογή](/en/openplatform/how-an-app-connects/)).
- Η οθόνη ρύθμισης αποφασίζει ποιος μπορεί να τη χρησιμοποιήσει μέσω της σημαίας `sa` του χρήστη.

Μια καλή συνήθεια, που προκύπτει από τον τρόπο λειτουργίας του κώδικα: ονομάστε το `value` ενός δικαιώματος από την ενέργεια στην εφαρμογή σας (`orders.read`, `orders.write`) και αντιστοιχίστε ομάδες σε αυτές τις τιμές στο OpenPlatform, ώστε η εφαρμογή σας να ελέγχει μόνο συμβολοσειρές.
