Silverstripe 3 - Невозможно реализовать безопасность доступа к контроллеру из CMS.

Добрый день,

Я все еще новичок в silverstripe и пытаюсь решить несколько действительно простых задач.

В настоящее время я пытаюсь реализовать ограничения безопасности с помощью функции контроллера моей страницы, которая уже была создана в моем DataObject и настроена через CMS.

Однако независимо от того, предоставляю ли я пользователю доступ для просмотра объекта, пользователь все равно его видит.

См. Пример ниже:

class MyComponent extends DataObject implements PermissionProvider{
  ///>... this is just a snippet not the full class ...

  ///>@Override
  public function canView($member = null){
      return Permission::check('COMPONENT_VIEW');
  }//canView

  /**
   * \brief the rest of the permission functions follow the same format as above 
   * i.e: canEdit, canDelete, canCreate
   */

  ///>@Override
  function providePermissions(){
     return array(
        'COMPONENT_VIEW' => 'Can view a component object',
        'COMPONENT_EDIT' => 'Can edit a component object',
        'COMPONENT_DELETE' => 'Can delete a component object',
        'COMPONENT_CREATE' => 'Can create a component object',
     );
  }//providePermissions


}//class

Хорошо, класс выше работает отлично; Я могу включить / выключить разрешения в группе для пользователя в разделе администратора CMS.

Вот где проблема, см. Код ниже:

///>Controller class snippet
class My_Controller extends Page_Controller{

      public function ListMyComponents(){
          $components = MyComponent::get()->filter(array('Status' => 'Enable'));

          ///>NOTE: How can I check to see if the user has access to view the component???
          ///> I've even tried, Member::canView(Member::currentUser()); It doesn't work!

          return $components;
      }//ListMyComponents
}//class

///>ss template file snippet
<% if ListMyComponents %>
   <% loop ListMyComponents %>
       $Title
   <% end_loop %>
<% end_if %>

Спасибо за вашу помощь.


person add    schedule 07.11.2014    source источник


Ответы (1)


Я понял это. По сути, я могу просто выполнить Permission :: check в Контроллере. См. Ниже код для решения:

public function ListMyComponents(){
    $components = null;
    if(Permission::check('COMPONENT_VIEW')){
       $components = MyComponent::get()->filter(array('Status' => 'Enable'));
    }
    return $components;
}//ListMyComponents

Тем не менее, спасибо тем, кто, возможно, занимался исследованием, чтобы решить эту проблему.

person add    schedule 07.11.2014