2015-07-19 39 views
2

我正在用cakephp製作一個應用3.我的用戶有2個角色,管理員和學生。管理員可以看到所有內容,學生只能看到並編輯他的個人資料。角色是數據庫中用戶表中的字段。cakephp 3根據用戶角色顯示html

admin的ctp文件有很多鏈接可以做不同的動作,比如添加一個新的產品或者刪除一個用戶,我想要做的就是顯示這個鏈接到管理員角色,但是使用相同的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

我編輯的問題,像例子 –

回答

1

如果你只需要顯示/隱藏你的View(.ctp)文件中的一些/所有內容(鏈接),那麼我有一個更好的主意。

只要從該頁面的控制器方法傳遞一個視圖變量來決定當前用戶是admin還是student。

對於例如,

在你控制器方法,

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> 
<? } ?> 

注:請注意這種方式只隱藏了視圖中學生的鏈接,a nd不能訪問這些鏈接。

+1

這個anserw工程添加ctp文件!謝謝 –

+1

你是如何檢查條件? if(檢查用戶是否爲管理員){ //在此處設置視圖變量 $ this-> set('is_admin',1); } 您正在查看視圖文件中的條件,那麼這些代碼行是什麼?需要澄清 –