cakephp 3根据用户角色显示html

时间:2015-07-19 16:59:52

标签: php html cakephp cakephp-3.0

我正在使用cakephp制作应用程序3.我的用户有2个角色,管理员和学生。管理员可以查看所有内容,学生只能查看和编辑他的个人资料。角色是数据库中users表中的一个字段。

管理员的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() ?>

我的第一个想法是使用和if在ctp文件中并且有两个链接列表并根据用户的角色显示一个或另一个,但我不知道是否有更好的表单来做到这一点,使用的工具cakephp的。

1 个答案:

答案 0 :(得分: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>
<? } ?>
  

注意:请注意,这种方式只会隐藏视图中学生的链接,而不会访问这些链接。