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