Обработка доступа Symfony для определенных папок в зависимости от вошедшего в систему пользователя
В приложении Symfony 5.0 мне нужно интегрировать файловый менеджер, который обеспечивает базовую обработку файлов для пользователей.
Каждому пользователю разрешено управлять файлами только в своей конкретной пользовательской папке, которая (очевидно) находится не в общей папке, а по некоторому пути, например
../data/images/[user_id]/
Выбранный мной файловый менеджер нуждается в этом единственном пути в качестве параметра, чтобы творить чудеса.
Как я могу определить правила доступа в symfony, чтобы определить это поведение для предоставления доступа к определенному, но динамическому пути, который зависит от текущего пользователя, вошедшего в систему?
1 ответ
Вы должны решить эту проблему в своем контроллере или в файловом менеджере. Вы должны создать схему базы данных, в которой будут регистрироваться права доступа для каждого пользователя и для каждого каталога.
Вы можете создать many to many
или many to one
отношения между user
а также directory
организация. Это отношение сопоставляет каталог с его владельцем
- Если у каждого пользователя есть каталог, вы можете создать его непосредственно при создании пользователя.
- Если у пользователя не может быть каталога, вы можете создать каталог только тогда, когда он решит создать его.
- Если у пользователя может быть несколько каталогов (отношение "многие ко многим"), вам придется создавать каталог каждый раз, когда пользователь решает создать его.
Чтобы иметь дело с правами доступа, вам необходимо создать второе отношение между пользователем и каталогом. Это отношение сопоставляет каталог с его пользователями, которые могут получить к нему доступ.
- Я думаю, что это отношение должно быть много ко многим, потому что, очевидно, в вашем случае пользователь может получить доступ ко многим каталогам, а каталоги могут быть доступны для многих пользователей.
Чтобы узнать, может ли пользователь получить доступ к ресурсу, файловый менеджер получит права доступа из базы данных, а затем либо предоставит файл, либо вернет ошибку.