2015-07-19 2 views
2

Я делаю приложение с cakephp 3. Мои пользователи имеют 2 роли, администратора и студентов. Администратор может видеть все, и ученик может видеть и редактировать только свой профиль. роли - это поле в таблице пользователей в базе данных.cakephp 3 display html в зависимости от роли пользователей

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

, например, это файл add.ctp для пользователей:

<div class="actions columns large-2 medium-3"> 
<h3><?= __('Actions') ?></h3> 
THIS ARE THE LINKS 
<ul class="side-nav"> 
    <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Clase'), ['controller' => 'Clases', 'action' => 'add']) ?></li> 
    <li><?= $this->Html->link(__('List Convenios Usuarios'), ['controller' => 'ConveniosUsuarios', 'action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Convenios Usuario'), ['controller' => 'ConveniosUsuarios', 'action' => 'add']) ?></li> 
    <li><?= $this->Html->link(__('List Desvinculaciones'), ['controller' => 'Desvinculaciones', 'action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Desvinculacione'), ['controller' => 'Desvinculaciones', 'action' => 'add']) ?></li> 
    <li><?= $this->Html->link(__('List Historial Alumnos'), ['controller' => 'HistorialAlumnos', 'action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Historial Alumno'), ['controller' => 'HistorialAlumnos', 'action' => 'add']) ?></li> 
    <li><?= $this->Html->link(__('List Pagos'), ['controller' => 'Pagos', 'action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Pago'), ['controller' => 'Pagos', 'action' => 'add']) ?></li> 
    <li><?= $this->Html->link(__('List Pedidos'), ['controller' => 'Pedidos', 'action' => 'index']) ?></li> 
    <li><?= $this->Html->link(__('New Pedido'), ['controller' => 'Pedidos', 'action' => 'add']) ?></li> 
</ul> 
<div class="users form large-10 medium-9 columns"> 
<?= $this->Form->create($user) ?> 
<fieldset> 
    <legend><?= __('Agrega Nuevo Usuario') ?></legend> 
    <?php 
     echo $this->Form->input('nombre', ['label'=>'Nombre Completo']); 
     echo $this->Form->input('fecha_nac',['label'=>'Fecha de Nacimiento']); 
     echo $this->Form->input('username',['label'=>'Nombre de Usuario']); 
     echo $this->Form->input('email'); 
     echo $this->Form->input('password', ['label'=>'Contraseña']); 
     echo $this->Form->input('telefono'); 
     echo $this->Form->input('rol', ['options' =>['Alumno'=>'Alumno', 'Monitor'=>'Monitor','Instructor'=>'Instructor']]); 
     echo $this->Form->input('fecha_ing',['label'=>'Fecha de Ingreso']); 
     echo $this->Form->input('profesion'); 
     echo $this->Form->input('grado_id', ['options' => $grados]); 
     echo $this->Form->input('referencia'); 
     echo $this->Form->input('estado', ['options' =>['Activo','Inactivo']]); 
     echo $this->Form->input('fecha_ult_acenso', ['label'=>'Fecha último ascenso','empty' => true, 'default' => '']); 
     echo $this->Form->input('nombre_apoderado', ['empty' => true, 'default' => 'No tiene Apoderado']); 
     echo $this->Form->input('telefono_apoderado', ['empty' => true, 'default' => '']); 
     echo $this->Form->input('nota_salud',['label'=>'Información de Salud', 'empty' => true, 'default' => 'No presenta Complicaciones']); 
     echo $this->Form->input('llevar_a', ['label'=>'En caso de Emergencia', 'empty' => true, 'default' => '']); 
     echo $this->Form->input('monto_paga',['label'=>'Mensualidad']); 
     echo $this->Form->input('id_user_referencia', ['label'=>'Quien Paga']); 
     echo $this->Form->input('observaciones', ['empty' => true, 'default' => 'No tiene observaciones']); 
     echo $this->Form->input('fecha_cambio_password', ['empty' => true, 'default' => '']); 
     echo $this->Form->file('foto'); 
    ?> 
</fieldset> 
<?= $this->Form->button(__('Agregar')) ?> 
<?= $this->Form->end() ?> 

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

+0

У вас есть два случая и (предположительно) поле в таблице пользователя, в котором указано, какую роль данный пользователь представляет - проверить для него вашу логику аутентификации и в файлах шаблонов для вывода одного списка ссылок или другого. Если вы ничего не сделали, этот вопрос слишком широк, чтобы ответить. – AD7six

+0

Я редактирую вопрос, добавляя файлы ctp как пример –

ответ

1

Если вам нужно показать/скрыть некоторые/все содержимое (ссылки) в файле View (.ctp), тогда у меня есть идея лучше.

Просто передайте переменную вида из метода контроллера для этой страницы, которая определяет, является ли текущий пользователь администратором или учеником.

Для например,

В вашем контроллер метод,

if(check if user is admin) { 
// set the view variable here 
    $this->set('is_admin', 1); 
} 

На ваш взгляд (файл .ctp) :.

<? if(isset($is_admin) && $is_admin === 1) { ?> 
<!-- All the link codes for admin goes here as html --> 
    <li><?= $this->Html->link(__('_ _ _'), ['controller' => 'Clases', 'action' => 'add']) ?></li> 
<? } ?> 

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

+1

этот anserw работает !! спасибо –

+1

Как вы проверили условие? if (проверьте, является ли пользователь администратором) { // установите переменную вида здесь $ this-> set ('is_admin', 1); } Вы проверяете состояние в файле вида, а затем, что эти строки выше кода? Необходимость уточнения –

Смежные вопросы