Я разрабатываю приложение, ориентированное на документы, и мне нужно управлять доступом пользователей к документам. У меня есть модуль, который обрабатывает аутентификацию пользователей, и еще один модуль, который обрабатывает операции CRUD с документами в хранилище данных. После аутентификации пользователя мне нужно указать, какие операции пользователь может и не может выполнять с документами на основе разрешений пользователя. Лучший вариант, который я мог бы придумать для объединения этих двух частей, — это создать еще один модуль, который дублирует API данных, но также принимает аутентифицированного пользователя в качестве параметра. Модуль делегирует проверку авторизации модулю аутентификации и делегирует операцию с документом модулю доступа к данным. Что-то типа:
-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.
Есть ли лучший способ справиться с этим?