Изменить просмотр загруженного файла в Elgg

Администраторы/вошедшие пользователи могут установить текущий контроль доступа при загрузке файла. Три типа доступа: публичный, частный и зарегистрированные пользователи:

  • публичный: загруженные файлы могут быть просмотрены и доступны пользователям, не вошедшим в систему

  • приватный: никто не сможет просматривать загруженные файлы, кроме пользователя и администратора

  • вошедшие в систему пользователи: только вошедшие в систему пользователи и администраторы могут просматривать и получать доступ к загруженному файлу.

Функциональность

Загруженные файлы можно просмотреть и получить к ним доступ в соответствии с контролем доступа, установленным пользователем.

Следовательно, когда общедоступный пользователь (не вошедший в учетную запись) может просматривать и получать доступ к загруженному файлу, для которого параметр доступа был установлен как общедоступный, но не сможет видеть файлы, для которых для параметра управления доступом установлено значение «частный» или «зарегистрированный пользователь».

Задача

Что я хотел бы сделать, так это изменить доступ к управлению, чтобы общедоступные пользователи (не вошедшие в учетную запись) не могли просматривать или получать доступ к загруженному файлу. Следовательно, даже если пользователь установил для параметра управления доступом общедоступный, незарегистрированный пользователь не может просматривать и получать доступ к этому загруженному файлу, поэтому все общедоступные пользователи могут видеть пустой список.

Поэтому я хотел бы спросить, должен ли я изменить структуру Elgg в каталоге /Elgg/views/default/output/access.php для достижения желаемого результата, или я могу изменить ее в представлении мода плагина: Elgg/ мод/плагин/представления/по умолчанию/объект?


person EEE    schedule 31.08.2015    source источник


Ответы (2)


Elgg спроектирован так, чтобы быть ориентированным на плагины, поэтому правильный подход заключается в создании собственного плагина, который будет переопределять элементы, которые вам нужны, как из основных, так и из сторонних плагинов. Мы объясняем мотивацию здесь: http://learn.elgg.org/en/1.12/guides/dont-modify-core.html

Насколько я понимаю, вы не хотите, чтобы файлы были ограничены только зарегистрированными пользователями или более. Для этого уже есть уровень доступа, вам просто нужно обеспечить его соблюдение.

Нам нужно изменить два элемента:

  1. сохранение файла отображаемой формы редактирования, чтобы не отображать нежелательные уровни доступа
  2. действие сохранения файла для отклонения нежелательного значения доступа

Объявление. 1 Вы можете переопределить представление forms/file/uploads и замените вызов input/access пользовательской версией, которая отфильтровывает нежелательные значения. Это лучше, чем менять input/access представление, которое используется повсеместно.

Объявление. 2 Вы можете либо переопределить все действие file/upload (что неприятно из-за копирования тонны логики), либо просто использовать плагин-хук, обеспечивающий дополнительный контроль. Здесь у вас есть хук, который позволяет вам прервать действие, когда вы обнаружите недопустимое входное значение: http://learn.elgg.org/en/1.12/guides/hooks-list.html#action-hooks

person Paweł Sroka    schedule 31.08.2015
comment
Позвольте мне подтвердить с вами, чтобы свести к минимуму любое недоразумение. Редактирование ядра Elgg — это большое НЕТ, так как это испортит всю структуру, и дальнейшее обслуживание Elgg будет затруднено. Во-вторых, я знаю, что уровень доступа уже существует, однако мне нужно перезаписать параметр «Общий доступ», чтобы пользователь, не вошедший в систему, не мог видеть загруженные файлы независимо от настроек доступа. Один метод — удалить PUBLIC из опции, другой — переопределить представление, как указано в Ad.1. Кроме того, я немного смущен вашей точкой зрения на изменение 2 элементов. - person EEE; 01.09.2015
comment
продолжение... Я хотел бы знать, что вы имеете в виду под двумя элементами, о которых вы говорите. Я согласен, что редактировать input/access нецелесообразно, так как он широко используется в других модах и в другом каталоге, это будет очень грязно. - person EEE; 01.09.2015
comment
Спасибо, я решил эту проблему, мне просто нужно было добавить гейткипер(), чтобы эта страница была недоступна для пользователей, которые не вошли в систему. Я добавил это в следующий каталог пути: mod/plugin/pages/plugin/all.php - person EEE; 01.09.2015

Как заявил Павел Срока, крайне нежелательно изменять основную структуру ядра Elgg. Следовательно, правильный подход — либо создать плагин, либо изменить существующий плагин.

Следовательно, как упоминалось в вопросе, основная задача состоит в том, чтобы запретить любому пользователю, не вошедшему в систему, доступ к просмотру и доступу к перечисленным элементам. Поэтому я реализовал «привратник ()».

gatekeeper() -> функция, позволяющая пользователю управлять выполнением кода, применяя правила контроля доступа. Кроме того, при применении он перенаправляет пользователя, не вошедшего в систему, на главную страницу, тем самым защищая содержимое страницы с ограниченным доступом от просмотра.

Наконец, «привратник ()» реализован в следующем каталоге до моего вопроса: elgg/mod/plugin/pages/plugin/all.php

person EEE    schedule 01.09.2015