简易权限设置

当用户id为1时 展示全部权限

用户id为2时,展示用户管理权限

登录视图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <link href="__STATIC__/H/static/h-ui/css/H-ui.min.css" rel="stylesheet" type="text/css" />
    <link href="__STATIC__/H/static/h-ui.admin/css/H-ui.login.css" rel="stylesheet" type="text/css" />
    <link href="__STATIC__/H/static/h-ui.admin/css/style.css" rel="stylesheet" type="text/css" />
    <link href="__STATIC__/H/lib/Hui-iconfont/1.0.8/iconfont.css" rel="stylesheet" type="text/css" />
    <title>后台登录</title>
</head>
<body>
<input type="hidden" id="TenantId" name="TenantId" value="" />
<div class="header"></div>
<div class="loginWraper">
    <div id="loginform" class="loginBox">
        <form class="form form-horizontal" action="http://www.day.com/test/login/save" method="post">
            <div class="row cl">
                <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60d;</i></label>
                <div class="formControls col-xs-8">
                    <input id="" name="name" type="text" placeholder="账户" class="input-text size-L">
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60e;</i></label>
                <div class="formControls col-xs-8">
                    <input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
                </div>
            </div>
            <div class="row cl">
                <div class="formControls col-xs-8 col-xs-offset-3">
                    <input name="" type="submit" class="btn btn-success radius size-L" value="&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;">
                    <input name="" type="reset" class="btn btn-default radius size-L" value="&nbsp;取&nbsp;&nbsp;&nbsp;&nbsp;消&nbsp;">
                </div>
            </div>
        </form>
    </div>
</div>
<div class="footer">Copyright 你的公司名称 by H-ui.admin v3.1</div>
<script type="text/javascript" src="__STATIC__/H/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="__STATIC__/H/static/h-ui/js/H-ui.min.js"></script>
<!--此乃百度统计代码,请自行删除-->
<script>
    var _hmt = _hmt || [];
    (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?080836300300be57b7f34f4b3e97d911";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>
<!--/此乃百度统计代码,请自行删除
</body>
</html>
</body>
</html>

 

 控制器代码:

<?php

namespace app\test\controller;

use app\test\model\LoginModel;
use think\Controller;
use think\Request;
use think\Session;

class Login extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //

    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //展示登录视图
        return view();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //接受前端登录参数
        $data=$request->param();
        $data['password']=md5($data['password']);
//      验证参数 *****略
       $res=LoginModel::getUserInfo($data);
// 进行对比
        if ($res['username']!=$data['name']){
            $this->error('账号错误','http://www.day.com/test/login/create');
        }
        if ($res['userpassword']!=$data['password']){
            $this->error('密码错误','http://www.day.com/test/login/create');
        }
//      获取用户的id,去进行关联表进行权限设置
        $userNode=LoginModel::getUserNode($res['id']);
        Session::set('userNode',$userNode);
        $this->success('登录成功','http://www.day.com/test/node/index');
    }

}

模型代码:

<?php

namespace app\test\model;

use think\Model;

class LoginModel extends Model
{
    //链接用户登录表
    protected $table = 'user';

//    数据库提取数据,用于检测账号是否输入正确
    public static function getUserInfo($data)
    {
        return self::where('username', $data['name'])
            ->find();
    }

//    根据用户id,进行表关联
    public static function getUserNode($id)
    {
//       进行表关联
        $field = 'user.username,role.role_name,node.*';
        $userNode = self::field($field)
            ->join('user_role', 'user.id=user_role.uid')
            ->join('role', 'user_role.rid=role.id')
            ->join('role_node', 'role.id=role_node.rid')
            ->join('node', 'role_node.nid=node.id')
            ->where('user.id', $id)
            ->select();

        return self::getTree($userNode);
    }
    public static function getTree($userNode,$pid=0)
    {
//定义一个空的数组
        $result = [];
        if (empty($userNode)){
            return  $result;
        }
//        循环数据
        foreach ($userNode as $v) {
            if ($v['pid'] == $pid) {
                $v['child'] = self::getTree($userNode, $v['id']);
                $result[]=$v;
            }
        }
        return $result;
    }


}

视图代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>后台管理系统</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <link href="__STATIC__/admin/css/main.css" rel="stylesheet" type="text/css"/>
    <link href="__STATIC__/admin/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
    <link href="__STATIC__/admin/css/bootstrap-responsive.min.css" rel="stylesheet" type="text/css"/>
    <script src="__STATIC__/admin/js/jquery-1.8.1.min.js"></script>
    <script src="__STATIC__/admin/js/bootstrap.min.js"></script>
</head>
<body>
<!-- 上 -->
<div class="navbar">
    <div class="navbar-inner">
        <div class="container-fluid">
            <ul class="nav pull-right">
                <li id="fat-menu" class="dropdown">
                    <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">
                        <i class="icon-user icon-white"></i> admin
                        <i class="icon-caret-down"></i>
                    </a>
                    <ul class="dropdown-menu">
                        <li><a tabindex="-1" href="javascript:void(0);">修改密码</a></li>
                        <li class="divider"></li>
                        <li><a tabindex="-1" href="/test/base/logout">安全退出</a></li>
                    </ul>
                </li>
            </ul>
            <a class="brand" href="javascript:void(0);"><span class="first">后台管理系统</span></a>
            <ul class="nav">
                <li class="active"><a href="javascript:void(0);">首页</a></li>
                <li><a href="javascript:void(0);">系统管理</a></li>
                <li><a href="javascript:void(0);">权限管理</a></li>
            </ul>
        </div>
    </div>
</div>
<!-- 左 -->
<div class="sidebar-nav">
{foreach $Think.session.userNode as $v}
    <a href="#{$v.id}" class="nav-header collapsed" data-toggle="collapse"><i class="icon-exclamation-sign"></i>{$v.node_name}</a>
    <ul id="{$v.id}" class="nav nav-list collapse">
        {foreach $v['child'] as $vv}
        <li><a href="javascript:void(0);">{$vv.node_name}</a></li>
        {/foreach}
    </ul>
    {/foreach}
</div>
<!-- 右 -->
</script>
</body>
</html>

 

 

 

 数据表结构:

用户表:

用户角色表用于关联角色:

 

 角色表:

 

 角色权限表,用户关联权限

 

 权限表:

 

 

posted @ 2021-09-21 16:01  王越666  阅读(94)  评论(0编辑  收藏  举报