Je dois mettre en œuvre un contrôle d'accès à grain fin dans une application Ruby on Rails. Les permissions des utilisateurs individuels sont sauvegardées dans une table de base de données et j'ai pensé qu'il serait préférable de laisser la ressource respective (c'est-à-dire l'instance d'un modèle) décider si un certain utilisateur est autorisé à lire ou écrire dans cette table. Prendre cette décision dans le contrôleur à chaque fois ne serait certainement pas très DRY.
Le problème est que pour faire cela, le modèle doit avoir accès à l'utilisateur actuel, pour appeler quelque chose comme may_read
?( current_user
, attribute_name
). En général, les modèles n'ont cependant pas accès aux données de session.
Il existe de nombreuses suggestions pour sauvegarder une référence à l'utilisateur actuel dans le fil de discussion actuel, par exemple dans cet article de blog . Cela résoudrait certainement le problème.
Les résultats voisins de Google m'ont cependant conseillé de sauvegarder une référence à l'utilisateur actuel dans la classe User, ce qui, je suppose, a été pensé par quelqu'un dont l'application n'a pas à accueillir beaucoup d'utilisateurs à la fois. ;)
Pour faire court, j'ai l'impression que mon souhait d'accéder à l'utilisateur actuel (c'est-à-dire aux données de session) à partir d'un modèle vient de moi le faire mal .
Pouvez-vous me dire en quoi j'ai tort ?
0 votes
Ironiquement, sept ans après que cette question ait été posée, "mal le faire" est 404ing. :)
1 votes
"J'ai pensé qu'il serait préférable de laisser la ressource respective (c'est-à-dire l'instance d'un modèle) décider si un certain utilisateur est autorisé à y lire ou à y écrire." Le modèle n'est peut-être pas le meilleur endroit pour cette logique. Des joyaux comme Pundit et Authority établissent un modèle consistant à avoir une classe "policy" ou "authorizer" distincte désignée pour chaque modèle (et les modèles peuvent les partager, si vous le souhaitez). Ces classes fournissent des moyens de travailler facilement avec l'utilisateur actuel.