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