2013-06-20 3 views
0

Я написал одно расширение для оформления заказа на обслуживание. Проблема, с которой я столкнулся, заключается в следующем:typo3 extbase разрешения в расширениях

Пользователи FE принадлежат к трем группам пользователей FE, а именно: «клиент», «администратор» и «служащий».

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

В настоящее время я составил таблицу заказов с отношением N: 1 с пользовательской таблицей FE. Поэтому каждый заказ должен быть связан с любым клиентом.

Так в контроллере, я проверяю пользователя для входа и используя пользовательский запрос в хранилище, я доступ порядка, связанные с LoggedIn клиент (пользователь FE)

В файле OrdersController.php

public function listAction() { 
    $orders = $this->ordersRepository->orderForLoginUsr(); 
    $this->view->assign('orders', $orders); 
} 

В файл OrdersRepository.php

public function orderForLoginUsr(){ 
     $loggedInUserId = $GLOBALS ['TSFE']->fe_user->user['uid']; 
     $query = $this->createQuery(); 
     $query->matching(
     $query->equals('user', $loggedInUserId) 
    ); 
     $query->setOrderings(array('crdate' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING)); 
     return $query->execute(); 
} 

Но вот мой вопрос заключается в том, чтобы сделать пользователь с правами администратора в состоянии увидеть все заказы сделанные всеми клиентами? Мне нужно написать другой шаблон и действие, которое вызывает функцию findAll()?

$orders = $this->ordersRepository->findAll(); 

И как установить для группы сотрудников?

Спасибо заранее

ответ

0

Я думаю, что самый простой способ это реально выполнить 3 действия с 3-мя различными плагинами, что-то вроде: listClientAction, listAdminAction и listEmployeeAction

В каждом из этих действий, вы реализуете метод в вашем хранилище, которое загрузит правильный список заказа с хорошей упорядочению: orderForLoginClient(), orderForLoginEmployee(), orderForLoginAdmin()

что делает трюк на самом деле является то, что будет 3 плагинов на странице, один для каждого действие. В каждом экземпляре вашего плагина вы устанавливаете доступ для правой be_group.

Не забудьте добавить действия и плагин в файлы localconf и ext_table.

Надеюсь, это поможет! Olivier

0

Если ваше мнение практически одинаково для клиента, администратора, сотрудника, вы должны просто добавить метод getOrderWithPermissionsForUser ($ currentUser);

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

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

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

Это вспомогательный метод для простого изменения вашего шаблона.

/** 
* This method can change the used template file in an action method. 
* 
* @param string $templateName Something like "List" or "Foldername/Actionname". 
* @param string $templateExtension Default is "html", but for other output types this may be changed as well. 
* @param string $controllerName Optionally uses another subfolder of the Templates/ directory 
*     By default, the current controller name is used. Example value: "JobOffer" 
* @param \TYPO3\CMS\Fluid\View\AbstractTemplateView $viewObject The view to set this template to. Default is $this->view 
*/ 
protected function changeTemplateFile($templateName, $templateExtension = 'html', $controllerName = null, AbstractTemplateView $viewObject = null) 
{ 
    if (is_null($viewObject)) { 
     $viewObject = $this->view; 
    } 

    if (is_null($controllerName)) { 
     $controllerName = $this->getControllerContext()->getRequest()->getControllerName(); 
    } 

    $templatePathAndFilename = $this->getTemplateRootpathForView($controllerName . '/' . $templateName . '.' . $templateExtension); 
    $viewObject->setTemplatePathAndFilename($templatePathAndFilename); 
}