Проблемы с ACL Joomla

Я написал компонент для Joomla 2.5. Это прекрасно работает. Однако у меня проблемы с контролем доступа. Компонент управляет документами. Это позволяет клиентам загружать их, помечать их, искать и т. д. Все это прекрасно работает. Пользователь должен войти в систему, чтобы иметь возможность просматривать, редактировать и удалять документы.

К сожалению, несмотря на то, что система ограничивает редактирование и удаление, похоже, это не ограничивает просмотр. Он не ограничивает просмотр только зарегистрированными пользователями. Если вы введете URL-адрес компонента для документа непосредственно в панель браузера, он загрузит представление:

http://www.mydomain.com/component/document_managment/1.html?view=document

Я искал вокруг и не могу найти ничего, что помогло бы. Любые идеи о том, что я мог сделать неправильно?


person user1616338    schedule 20.09.2013    source источник


Ответы (1)


Я предполагаю, что у вас уже есть полный ACL-список, т. е. есть столбец активов в таблице documents, и у вас есть access.xml с некоторыми определенными правилами ACL, т.е.

<section name="component">
  <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
...
  1. Вы хотите добавить правила ACL core.view и core.view.own в access.xml (который обычно находится в корне компонента администратора).

    <action name="core.view" title="View all documents"
    <action name="core.view.own" title="View own documents"
    
  2. В конфигурации компонента назначьте привилегии пользователям, чтобы суперпользователи могли просматривать все (менеджеры имеют привилегию core.view), а каждый зарегистрированный пользователь имеет core.view.own

  3. В view.html или, что еще лучше, в модели вы проверяете привилегии перед загрузкой любых данных:

    $user = JFactory::getUser();
    $id = $app->input->getInt('id') // load the document id
    $canView = false;
    if($id){
        $canView = $user->authorise('core.view', 'com_yourcomponent.document') || 
            $user->authorise('core.view.own', 'com_yourcomponent.document.'.$id);
    }
    
person Riccardo Zorn    schedule 21.09.2013
comment
привет @RiccardoZorn спасибо за помощь. Я не могу заставить его работать должным образом. Теперь он запрещает просмотр документа, но также останавливает просмотр документа всеми, кто вошел в систему. У меня нет столбца активов в таблице документов. Зачем это нужно? Редактирование и т. д. работает без него. Спасибо - person user1616338; 21.09.2013
comment
Если у вас его нет, скорее всего, любой пользователь с правами редактирования может редактировать любые документы; в то время как обычно вы хотите разрешить редактирование только владельцу и суперпользователям; ACL позволяют вам добиться этого, но вам нужен актив для каждого документа, поэтому я упомянул столбец активов. - person Riccardo Zorn; 22.09.2013
comment
Конечно, вы можете добиться того же, просто проверив общие разрешения пользователя (core.view и core.edit) и идентификатор владельца документа; но вы должны вручную написать код для достижения того, что уже предлагает вам ACL Joomla!. - person Riccardo Zorn; 22.09.2013