Erlang 在面向文档的系统中,如何处理经过身份验证的用户对资源的访问?

Erlang 在面向文档的系统中,如何处理经过身份验证的用户对资源的访问?,erlang,authorization,couchdb,data-access,Erlang,Authorization,Couchdb,Data Access,我正在开发一个面向文档的应用程序,需要管理用户对文档的访问。我有一个模块处理用户身份验证,另一个模块处理数据存储上的文档CRUD操作。一旦用户通过身份验证,我需要根据用户的权限强制执行用户可以和不能对文档执行的操作。我能想到的将这两部分集成在一起的最佳选择是创建另一个模块,该模块复制数据API,但也将经过身份验证的用户作为参数。该模块将授权检查委托给auth模块,并将文档操作委托给数据访问模块。比如: -module(auth_data_access). % User is authent

我正在开发一个面向文档的应用程序,需要管理用户对文档的访问。我有一个模块处理用户身份验证,另一个模块处理数据存储上的文档CRUD操作。一旦用户通过身份验证,我需要根据用户的权限强制执行用户可以和不能对文档执行的操作。我能想到的将这两部分集成在一起的最佳选择是创建另一个模块,该模块复制数据API,但也将经过身份验证的用户作为参数。该模块将授权检查委托给auth模块,并将文档操作委托给数据访问模块。比如:

 -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. 
有没有更好的办法来处理这件事

根据我的看法,我更喜欢这样的东西

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

我完全可以接受您上面演示的方式。您的错误处理似乎不一致。您将auth:save\u allowed放入case语句中,但让data\u access:save\u doc在出错时崩溃。这不是实际的代码示例,只是一个示例。但你是对的,它是不一致的,应该被修复。这看起来确实比问题中的示例代码更清晰,但不能回答是否有更好的常规方法来检查/强制执行授权。