• 《shop》 --- 角色数据维护


    控制器:RoleController  操作方法:showlist

    商品列表界面,在left.html中

    <table id=child{$v.auth_id} style="display:none" cellspacing=0 cellpadding=0 width=150 border=0>
    {foreach $auth_infoB as $kk => $vv}
    {*子级权限的pid与外部权限的id必须相等*}
    {if $vv.auth_pid == $v.auth_id}
    <tr height=20>
    <td align=middle width=30>
    <img height=9 src="{$smarty.const.ADMIN_IMG_URL}menu_icon.gif" width=9>
    </td>
    <td><a class="menuchild" href="{$smarty.const.__MODULE__}/{$vv.auth_c}/{$vv.auth_a}" target="right">{$vv.auth_name}</a></td>
    </tr>
    {/if}
    {/foreach}
    <tr height=4><td colspan=2></td></tr>
    </table>
    {/foreach}
    </td>
    <td width=1 bgcolor=#d1e6f7></td>
    </tr>
    </table>

    1,展示角色列表,

    控制器:RoleController

    操作方法:showlist

    class RoleController extends AdminController{
    //角色列表展示
    function showlist(){
    //获得角色数据、展示数据
    $info = D('Role')->select();
    $this -> assign('info',$info);
    $this -> display();
    }

    在view的role模块下showlist.html中

    {foreach $info as $k => $v} 
    <tr id="product1">
    <td>{*$v@iteration*}{$v.role_id}</td>
    <td>{$v.role_name}</td>
    <td>{$v.role_auth_ids}</td>
    <td>{$v.role_auth_ac}</td>
    <td><a href="{$smarty.const.__CONTROLLER__}/distribute/role_id/{$v.role_id}">分配权限</a></td>   //传递role_id信息给distribute方法,告知当前为哪个角色分配权限
    <td><a href="">修改</a></td>
    <td><a href="" onclick="">删除</a></td>
    </tr>
    {/foreach}

    2,给角色分配权限 

    控制器:RoleController

    操作方法:distribute

    //分配权限
    function distribute($role_id){
    查询被分配到权限的角色信息

    $role_info = D('Role') -> find($role_id);

    //获得全部用于分配的权限并展示给模板
    //顶级权限、次顶级权限
    $auth_infoA = D('Auth')->where('auth_level=0')->select();
    $auth_infoB = D('Auth')->where('auth_level=1')->select();

    $this -> assign('have_auth',$have_auth);
    $this -> assign('auth_infoA',$auth_infoA);
    $this -> assign('auth_infoB',$auth_infoB);
    $this -> assign('role_info',$role_info);
    $this -> display();
    }
    }
    }

    在distribute.html中

    <table border="1" width="100%" class="table_a">
    {foreach $auth_infoA as $k => $v}
    <tr>
    <td width='18%'>
    {*判断是否已经拥有该权限*}
    <input type='checkbox' name='auth_id[]' value='{$v.auth_id}'
    {if in_array($v.auth_id,$have_auth)}checked='checked'{/if}
    />
    {$v.auth_name}</td>
    <td>
    {foreach $auth_infoB as $kk => $vv}
    {if $vv.auth_pid==$v.auth_id}
    <div style='200px;float:left;'>
    <input type='checkbox' name='auth_id[]' value='{$vv.auth_id}'
    {if in_array($vv.auth_id,$have_auth)}checked='checked'{/if}
    />
    {$vv.auth_name}</div>
    {/if}
    {/foreach}
    </td>
    </tr>
    {/foreach}
    </table>

    2.2收集表单

    接收到的form表单信息不能直接写入到数据库,需要二期制作

    在RoleController控制器中

    //分配权限

    function distribute($role_id){
    $role = new ModelRoleModel();
    //两个逻辑:展示、收集
    if(!empty($_POST)){
    //$_POST数据需要二期制作才可以写入数据库
    //在自定义RoleModel里边制作一个方法saveAuth,实现数据制作和存储
      $z = $role->saveAuth($role_id,$_POST['auth_id']);
    if($z){
      $this -> redirect('showlist',array(),2,'分配权限成功');
    }else{
    $this -> redirect('distribute',array('role_id'=>$role_id),2,'分配权限失败');
    }
    }else{
    //查询被分配权限的角色信息
    $role_info = $role->find($role_id);

    //角色已经拥有的权限信息
    $have_auth = explode(',',$role_info['role_auth_ids']);//变为数组

    //获得全部用于分配的权限并展示给模板
    //顶级权限、次顶级权限
    $auth_infoA = D('Auth')->where('auth_level=0')->select();
    $auth_infoB = D('Auth')->where('auth_level=1')->select();

    $this -> assign('have_auth',$have_auth);
    $this -> assign('auth_infoA',$auth_infoA);
    $this -> assign('auth_infoB',$auth_infoB);
    $this -> assign('role_info',$role_info);
    $this -> display();
    }
    }

    RoleModel模型实现制作和修改逻辑:

    //Role模型model类
    class RoleModel extends Model{
    //分配权限,收集信息、二期制作、存储信息
    function saveAuth($role_id,$authids){
    //① 数组的authid 变为 字符串的authid
    $authid_str = implode(',',$authids); //implode 把字符串转为数组
    //② 根据字符串的authid信息 查询对应的"控制器-操作方法""
    $authinfo = D('Auth')->select($authid_str);
    $s = "";
    foreach($authinfo as $k => $v){
    if(!empty($v['auth_c']) && !empty($v['auth_a'])){
    $s .= $v['auth_c']."-".$v['auth_a'].",";
    }
    }
    $s = rtrim($s,',');

    $sql = "update sw_role set role_auth_ids='$authid_str',role_auth_ac='$s' where role_id='$role_id'";
    return $this -> execute($sql);
    }
    }

     

    rtrim :从字符串右侧移除字符:

    <?php
    $str = "Hello World!";
    echo $str . "<br>";
    echo rtrim($str,"World!");
    ?>
    
    运行结果:
    Hello World!
    Hello    

     

    2.3 把已经拥有的权限给显示出来

    每次给角色分配权限的时候,把已经拥有的权限给显示出来。

    实现其功能就是一个“判断”过程:

    ① 在模板表单页面显示全部的权限

    ② 把“被分配权限角色”已经拥有的权限信息也查询获得出来,并传递给模板表单

    判断:遍历全部权限,判断每个权限的id信息是否是“已经拥有权限”的数组元素即可。

     

    在 RoleController 控制器中获得当前角色已经拥有的权限:

    //角色已经拥有的权限信息
    $have_auth = explode(',',$role_info['role_auth_ids']);//变为数组

    模板  distribute.html  中做判断:

    <table border="1" width="100%" class="table_a">
    {foreach $auth_infoA as $k => $v}
    <tr>
    <td width='18%'>
    {*判断是否已经拥有该权限*}
    <input type='checkbox' name='auth_id[]' value='{$v.auth_id}'
    {if in_array($v.auth_id,$have_auth)}checked='checked'{/if}
    />
    {$v.auth_name}</td>
    <td>
    {foreach $auth_infoB as $kk => $vv}
    {if $vv.auth_pid==$v.auth_id}
    <div style='200px;float:left;'>
    <input type='checkbox' name='auth_id[]' value='{$vv.auth_id}'
    {if in_array($vv.auth_id,$have_auth)}checked='checked'{/if}
    />
    {$vv.auth_name}</div>
    {/if}
    {/foreach}
    </td>
    </tr>
    {/foreach}
    </table>

  • 相关阅读:
    【STM32F429】第6章 RL-USB调试组件使用方法(重要)
    【STM32F407】第6章 RL-USB调试组件使用方法(重要)
    IAR9.10下载(2021-02-23)
    【STM32H7】第5章 RL-USB协议栈移植(MDK AC6)
    【STM32F429】第5章 RL-USB移植(MDK AC6)
    【STM32F407】第5章 RL-USB移植(MDK AC6)
    【STM32H7】第4章 RL-USB移植(MDK AC5)
    【STM32F429】第4章 RL-USB移植(MDK AC5)
    【STM32F407】第4章 RL-USB移植(MDK AC5)
    【STM32H7】第3章 RL-USB协议栈介绍
  • 原文地址:https://www.cnblogs.com/dh2608/p/5541869.html
Copyright © 2020-2023  润新知