security.md 3.0 KB

Security

Authentification Symfony

Fonctionnement de base

L'authentification se fait via une requête POST envoyée à l'adresse /login_check avec le body suivant :

{
    "username": "login",
    "password": "password"
}

En cas de succès, la requête renvoie un token qui servira ensuite à l'utilisateur à s'identifier.

Les requêtes suivantes devront posséder les headers suivants :

  • x-accessid : l'id de l'utilisateur (ou Access)
  • authorization : une chaine de caractères de la forme "BEARER XXXXX", où XXXXX est le token retourné par la requête de login

Connexion Switch

Certains utilisateurs (admins, familles) peuvent prendre le rôle d'un autre utilisateur via la connexion switch.

Pour ce faire, un nouveau header doit être ajouté aux requêtes :

  • x-switch-user: l'id de l'utilisateur dont on veut prendre le rôle

Roles et Modules

Les droits d'un utilisateur sont conditionnés à différents critères, dont :

  • Les modules que possède l'organisation à laquelle il est appartient
  • Les rôles de cet utilisateur au sein de cette organisation

On peut obtenir la liste des modules de l'organisation et des rôles de l'utilisateur actif en son sein au moyen de la requête : /api/my_profile

Modules

Les modules d'une organisation dépendent du produit acheté par celle-ci et des éventuels modules complémentaires. Ces deux informations sont stoquées dans la table Settings.

Le fichier config/opentalent/products.yaml définit :

  • L'appartenance des modules aux products
  • L'appartenance des entities aux modules

De plus, le fichier config/opentalent/modulesbyconditions.yaml complète cette configuration en définissant des modules présentant des conditions particulières (appartenance à la CMF en particulier)

A chaque requête effectuée, la classe \App\Security\Voter\ModuleVoter vérifie si la ressource demandée appartient à un module possédé par l'organisation de l'utilisateur. Si ce n'est pas le cas, une erreur AccessDeniedHttpException est levée.

Sécurité des ressources Api-Platform

See : https://api-platform.com/docs/core/security/

La sécurité des ApiResources peut être définie de manière globale pour la ressource, ou pour chaque opération (Get, GetCollection, Put, Post, Delete).

Exemple :

#[ApiResource(
    operations: [
        new Get(
            security: '(is_granted("ROLE_ORGANIZATION_VIEW") or is_granted("ROLE_ORGANIZATION")) and object.getOrganization().getId() == user.getOrganization().getId()'
        ),
        new Put(
            security: 'is_granted("ROLE_ORGANIZATION") and object.getOrganization().getId() == user.getOrganization().getId()'
        )
    ],
)]

Dans certains cas plus complexes (ex: Access), cette configuration peut être déplacée dans un fichier de configuration situé dans le répertoire ~/config/api_platform/ et portant le nom de la ressource.

Extensions Doctrine

Voters

Internal Requests

Cas particuliers

Les Fichiers