# Sécurité des routes
La mise en place de la sécurité des routes fait partie de la configuration des routes.
# Définir des droits
La définition des droits se fait dans un fichier de configuration XML comme pour les routes.
Les droits sont composés de
accesses/@namespace
: namespace du droitaccesses/access/@name
: référence du droitaccesses/access/description
: description textuelle du droit
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:accesses namespace="MyAccesses">
<sde:access name="user">
<sde:description>Normal Access</sde:description>
</sde:access>
<sde:access name="admin">
<sde:description>Administrator Access</sde:description>
</sde:access>
</sde:accesses>
</sde:config>
La référence complète d'un droit est NAMESPACE::NAME
;
# Affectation des droits à des comptes
L'affectation d'un droit est fait par les attributs suivants :
accesses/@namespace
: namespace du droitaccesses/route-access/@ref
: référence du droit à poseraccesses/route-access/@account
: référence système du compte (login pour les utilisateurs)
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:accesses namespace="MyAccesses">
<!-- add privilege "MyAccesses::user" to big boss role -->
<sde:route-access ref="user" account="bigboss"/>
</sde:accesses>
</sde:config>
# Suppression de droits à des comptes
La suppression de droit est fait en utilisant l'attribut accesses/route-access/@policy
.
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:accesses namespace="MyAccesses">
<!-- delete privilege "MyAccesses::user" to big boss role -->
<sde:route-access ref="user" account="bigboss" policy="delete"/>
</sde:accesses>
</sde:config>
# requiredAccess
La propriété requiredAccess
indique si la route nécessite un droit particulier pour être exécutée. Si la valeur est
null
aucun droit n'est vérifié. Si la propriété est différente de false
alors la propriété authenticated
doit
forcément être à true
(ce qui est la valeur par défaut). En effet, un accès non authentifié ne peut pas prétendre
avoir un contrôle d'accès lié à un profil d'utilisateur. Dans le cas contraire, une erreur sera déclenchée.
La syntaxe pour la description d'un droit est soit une chaîne de caractères indiquant le droit nécessaire soit une liste
de droits en cas de vérification plus complexe. Cette liste de droits peut désigner un des droits à posséder (or
) ou
tous les droits à posséder (and
) sous la forme d'un objet en JSON ayant pour clef la politique de droit (or
ou
and
) et un tableau non indexé de droits (voir exemple ci-dessous).
Le droit à indiquer doit être un des identifiants des droits enregistrés. L'enregistrement des droits est indiqué dans le chapitre Configuration des droits d'accès.
Exemple :
Pattern | résultat |
---|---|
null | Pas de vérification |
true | Non valide => Erreur HTTP 400 |
my:firstRight | Le droit my:firstRight est requis |
{"or":["my:firstRight", "my:otherRight"]} | Le droit my:firstRight ou my:otherRight est requis |
{"and":["my:firstRight", "my:otherRight"]} | Les droits my:firstRight et my:otherRight sont requis |
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:routes namespace="My">
<sde:route name="welcomeUser">
<sde:callable>\My\Routes\Welcome</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/autotest/welcome</sde:pattern>
<sde:requiredAccess>
<sde:access ns="MyAccesses">user</sde:access>
</sde:requiredAccess>
</sde:route>
<sde:route name="welcomeUserAndAdmin">
<sde:callable>\My\Routes\Welcome</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/autotest/welcome</sde:pattern>
<sde:requiredAccess>
<sde:access ns="MyAccesses">user</sde:access>
<sde:access ns="MyAccesses">admin</sde:access>
</sde:requiredAccess>
</sde:route>
<sde:route name="welcomeUserOrAdmin">
<sde:callable>\My\Routes\Welcome</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/autotest/welcome</sde:pattern>
<sde:requiredAccess operator="or">
<sde:access ns="MyAccesses">user</sde:access>
<sde:access ns="MyAccesses">admin</sde:access>
</sde:requiredAccess>
</sde:route>
</sde:routes>
</sde:config>
# authenticated
Permet d'indiquer que la connexion est authentifiée avant d'exécuter la route. Par défaut, une route est authentifiée
sauf si cette propriété a la valeur false
.
Route non authentifiée
Si la route n'est pas authentifiée, le contexte n'est pas initialisé. Par conséquent, aucune méthode nécessitant un contrôle d'accès ne peut être utilisée.
Exemple d'initialisation d'un contexte :
$user = \Anakeen\Core\AccountManager::getAccount("login utilisateur")
if ($user) {
\Anakeen\Core\ContextManager::initContext($user);
}
Dans le cas où une route non authentifiée est utilisée, le code appelé par la route ne doit pas appartenir à la plateforme (Afin de ne pas avoir à initialiser un contexte)
Une route authentifiée permet d'avoir accès à l'utilisateur connecté.
TIP
Une route avec un requiredAccess
doit forcément être authentifiée.
Une route non authentifiée ne peut accéder à aucun Smart Element contrôlé.
Exemple de route non authentifiée :
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:routes namespace="My">
<sde:route name="openBar">
<sde:callable>\My\Routes\OpenBar</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/very/welcome</sde:pattern>
<sde:authenticated>false</sde:authenticated>
</sde:route>
</sde:routes>
</sde:config>