2010-01-12 2 views
3

Je développe une application orientée document et j'ai besoin de gérer l'accès des utilisateurs aux documents. J'ai un module qui gère l'authentification des utilisateurs, et un autre module qui gère les opérations CRUD de document sur le magasin de données. Une fois qu'un utilisateur est authentifié, je dois appliquer les opérations que l'utilisateur peut et ne peut pas effectuer sur les documents en fonction des autorisations de l'utilisateur. La meilleure option que je pourrais envisager pour intégrer ces deux pièces ensemble serait de créer un autre module qui duplique l'API de données mais qui prend aussi l'utilisateur authentifié comme paramètre. Le module délègue la vérification d'autorisation au module auth et délègue l'opération de document au module d'accès aux données. Quelque chose comme:Comment gérer l'accès utilisateur authentifié aux ressources dans un système orienté document?

-module(auth_data_access). 

% User is authenticated (logged into the system) 
% save_doc validates if user is allowed to save the given document and if so 
% saves it returning ok, else returns {error, permission_denied} 
save_doc(Doc, User) -> 
    case auth:save_allowed(Doc, User) of 
     ok -> 
      data_access:save_doc(Doc); 
     denied -> 
      {error, permission_denied} 
    end 
    end. 

Y at-il un meilleur moyen que je peux gérer cela?

+0

La façon dont vous démontrez ci-dessus semble parfaitement acceptable pour moi. –

+1

Votre gestion des erreurs semble incohérente. Vous mettez auth: save_allowed dans une instruction case, mais laissez data_access: save_doc planter en cas d'erreur. – Zed

+0

Ce n'était pas un échantillon réel du code, juste un exemple. Mais vous avez raison, c'est incohérent et devrait être corrigé. –

Répondre

0

Selon moi answer to "How do I elegantly check many conditions in Erlang" je préfère quelque chose comme

save_doc(Doc, User) -> 
    ok = auth:save_allowed(Doc, User), 
    data_access:save_doc(Doc). 
+0

Cela semble plus propre que l'exemple de code dans les questions, mais ne répond pas s'il existe une meilleure façon générale de vérifier/d'appliquer l'autorisation. –

Questions connexes