Альтернатива Sharepoint с помощью MODX Revolution
Всем привет.
Необходимо разработать альтернативу Sharepoint. Всё как обычно: есть несколько групп пользователей, они должны видеть только свои закачанные файлы, некоторые группы могут закачивать файлы, другие — нет.
Смысл — файлообмен после логина на сайт.
Вот думаю как это лучше сделать — через фронт и компонент Login или через бэкэнд, в админке (сделать источники файлов, позакрывать лишнее и т.д.)?
Хотелось бы на фронте.
Есть советы/идеи?
Спасибо.
Необходимо разработать альтернативу Sharepoint. Всё как обычно: есть несколько групп пользователей, они должны видеть только свои закачанные файлы, некоторые группы могут закачивать файлы, другие — нет.
Смысл — файлообмен после логина на сайт.
Вот думаю как это лучше сделать — через фронт и компонент Login или через бэкэнд, в админке (сделать источники файлов, позакрывать лишнее и т.д.)?
Хотелось бы на фронте.
Есть советы/идеи?
Спасибо.
Комментарии: 20
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Для Загрузки файлов — Uploadify
Расскажите как планируете делать показ и отдачу файлов пользователем? Мне кажется вы столкнетесь с той же проблемой, с которой вскоре столкнусь и я (правда не в рамках modx но все еще в рамках php)
Поделитесь своими мыслями?
Если файлы могут видеть и скачивать не все, то это означает что перед их отдачей нужно проверять наличие прав. А это значит что отдачу файла нельзя поручить просто вебсерверу, как обычную статику иначе при наличии прямой ссылки на файл кто угодно его скачает. А значит отдачу нужно производить уже через php, например читая file_get_contents() и отдавая file_put… Но я предвижу тут проблемы с файлами большого размера.
Как планировали поступить вы?
Однако не могу сказать что я точно и доподлинно понимаю как работает встроенная функция readfile() в интерпретаторе php.
Куда именно она читает, как работает с потоком, например видео.
Что будет если 10 пользователей запросят на скачивание видео файл размером 12 гигабайт.
Думаю, как и с любыми другими типами файлов.
Наверно веб-сервер должен тебе ответить на этот вопрос )
Можно попробовать вариант с переадресацией на статический файл — проверил права и редирект на файл. Тут надо смотреть, что оптимальнее.
П.С. Да даже права проверять не нужно — проверяй их перед выводом списка файлов пользователю (лучше настоящие имена не выводить). А по клику переадресация на нормальный файл.
В таком случае один пользователь может передать другому ссылку и тот скачает файл без проблем.
Там же в комментациях как отдавать файл частями.
Есть ещё такой вариант.
Я через поиск находил примерно эти же страницы, но просто работа над проектом еще не начата и я только вскользь ознакамливался с этой темой.
Набросал отдачу через file_put_content() и она работала хорошо, но я пробовал файлы около 100 мегабайт, а у меня предвидятся файлы с видеозаписями по 2-3 гигабайта, причем доступ к ним может быть сразу у сотни пользователей одновременно.
И иногда видеофайл нужно отдать на скачивание, а иногда его нужно запустить на воспроизведение в браузере и здесь я снова плаваю в теории, насколько я понимаю для воспроизведения в браузере как раз хорошо если буферизация включена.
В общем уже буду более детально вникать когда подпишем договор на эту работу.
На сервере с такими характеристиками
«Процессор1 x 2.8 ГГц
Оперативная память 1 ГБ
NVMe 10 ГБ»
отдача даже одного файла приводит к полной загрузке процессора.
1. Создал группы ресурсов и пользователей.
2. Создал ресурсы, к которым открыл доступы нужным группам (ведь 1 пользователь может состоять в нескольких группах).
3. С помощью сниппета «FileDownload R» сделал вывод нужной директории с ftp.
4. С помощью .htaccess закрыл листинг этой директории.
5. Ну и стандартная логин-форма из сниппета «Login».
Теперь вопрос. Это безопасно?
Конечно сервер самый простенький, но зато на нем более показательные получаются результаты. Раз одноядерный процессор может уйти в 100 процентов от отдачи одного файла, то значит нельзя рассчитывать только на вертикальное масштабирование сервера.
Даже если установить 16 ядер то 20 пользователей, которые примерно одновременно запросят на выдачу файл — уложат и 16 ядер легко.
Будем думать, к счастью время есть для поиска оптимального решения, возможно напишу линукс демон, который будет в фоновом режиме пережимать видео и с гигабайта останется 300 мегабайт.
Проверил у себя на Apache, работает.
Тут уже включаются нюансы проекта. Такой способ конечно хорош, но он не исключает того, что один пользователь получит законно ссылку на скачивание файла и передаст тому, кто такого права не имеет.
И тут уже будут юридические нюансы ответственности, если службой безопасности предприятия будет доказано, что файл был незаконно получен именно с сайта (то есть может быть скачан по прямой ссылке) то ответственность будет нести разработчик. Если же один человек скачал законно файл, а потом передал его по почте тому, кто доступа к файлу не имеет — будет отвечать сотрудник это сделавший.
Вот для примера файл лежит в modx.local/assets/files/.
Т.е. перед тем, как отдать файл, ты проверяешь права. Так что левый пользователь не сможет загрузить его.
Скачивается только залогиненным пользователем. Гостю отворот-поворот.