首页 > 其他分享 >管理中心,管理员日志管理

管理中心,管理员日志管理

时间:2023-04-22 22:47:30浏览次数:31  
标签:管理中心 string admin res 管理员 date 日志 true

前言:

管理员日志管理,添加日志,删除日志。

管理员在后台的每个操作,都记录对应的地址,以及操作参数。

正文:

 

管理员管理列表页面效果:

 控制器代码:controllers/adminLog.go

//日志列表 ,带翻页
func AdminLogList(c *gin.Context)  {
    //获取列表
    list := modes.AdminLogList(c)
    //获取管理员列表
    c.HTML(http.StatusOK,"admins/admin_log_list.html", gin.H{
        "list":list,
        "count":len(list),
        "start_date":c.Query("start_date"),
        "end_date":c.Query("end_date"),
        "admin_uname":c.Query("admin_uname"),
        "ip_addr":c.Query("ip_addr"),
    })
}

//日志详情
func AdminLogDetail(c *gin.Context)  {

}

//删除日志
func AdminLogDel(c *gin.Context)  {

    res,msg := modes.AdminLogDel(c)
    if res != true {
        c.JSON(http.StatusOK, gin.H{ "code": 400, "msg":  msg,})
        return
    }
    c.JSON(http.StatusOK, gin.H{ "code": 0, "msg":  "删除成功",})

}

//批量删除日志
func AdminLogDelBatch(c *gin.Context)  {
    res,msg := modes.AdminLogDelBatch(c)
    if res != true {
        c.JSON(http.StatusOK, gin.H{ "code": 400, "msg":  msg,})
        return
    }
    c.JSON(http.StatusOK, gin.H{ "code": 0, "msg":  "删除成功",})
}

 

模型代码:modes/adminsModel.go 

//日志记录表
type AdminsLog struct {
    Id int `form:"id"`
    AdminUid int `form:"admin_uid"`
    RequestUrl string `form:"request_url"`
    RequestMethod string `form:"request_method"`
    RequestParams string `form:"request_params"`
    IpAddr string    `form:"ip_addr"`
    AddDatetime string `form:"add_datetime"`
}


//获取管理员日志列表
func AdminLogList(c *gin.Context) ([]AdminsLog) {
    log_list := []AdminsLog{}
    admin :=Admins{}
    NewDb := DB

    if admin_uname,isExist := c.GetQuery("admin_uname");isExist == true{
        if strings.TrimSpace(admin_uname) != ""{
            res := DB.Model(Admins{}).Where("admin_uname=?",admin_uname).Find(&admin)
            if res.Error == nil {
                NewDb = NewDb.Where("admin_uid = ?",admin.AdminUid)
            }
        }
    }
    if ip_addr,isExist := c.GetQuery("ip_addr");isExist == true{
        if strings.TrimSpace(ip_addr) != ""{
            if strings.Contains(ip_addr,":") {
                ipa := strings.Split(ip_addr,":")
                ip_addr = ipa[0]
            }
            NewDb = NewDb.Where("ip_addr like ?",ip_addr+"%")
        }
    }
    if start_date,isExist := c.GetQuery("start_date");isExist == true{
        if strings.TrimSpace(start_date) != "" {
            start_date = start_date + " 00:00:00"
            NewDb = NewDb.Where("add_datetime > ?", start_date)
        }
    }
    if end_date,isExist := c.GetQuery("end_date");isExist == true{
        if strings.TrimSpace(end_date) != "" {
            end_date = end_date+" 23:59:59"
            NewDb = NewDb.Where("add_datetime <= ?",end_date)
        }
    }

    res := NewDb.Model(AdminsLog{}).Find(&log_list)
    if res.Error != nil {
        return log_list
    }
    return log_list
}

//写入登录日志
func AddAdminLog(admin_uid int,c *gin.Context) bool {
    var  url string
    var params_str string
    //记录日志
    if(strings.Contains(c.Request.RequestURI,"?")){
        spurl := strings.Split(c.Request.RequestURI,"?")
        url = spurl[0]
    }else{
        url = c.Request.RequestURI
    }

    if (c.Request.Method == "POST") {

        if err := c.Request.ParseMultipartForm(32 << 20); err != nil {
            if !errors.Is(err, http.ErrNotMultipart) {
                fmt.Println(nil, err)
            }
        }

        var postMap = make(map[string]any, len(c.Request.PostForm))
        for k, v := range c.Request.PostForm {
            if len(v) > 1 {
                postMap[k] = v
            } else if len(v) == 1 {
                postMap[k] = v[0]
            }
        }
        //密码,加密存储
        if url == "/admin/dologin" {
            postMap["passwd"]  = common.MyMd5(postMap["passwd"].(string))
        }

        dataType , _ := json.Marshal(postMap)
        params_str = string(dataType)

    }else{
        query := c.Request.URL.Query()
        var queryMap = make(map[string]any, len(query))
        for k := range query {
            queryMap[k] = c.Query(k)
        }
        dataType1 , _ := json.Marshal(queryMap)
        params_str = string(dataType1)
    }

    admins_log := AdminsLog{
        AdminUid: admin_uid,
        RequestUrl: url,
        RequestMethod: c.Request.Method,
        RequestParams: params_str,
        IpAddr: c.Request.RemoteAddr,
        AddDatetime: time.Now().Format(common.TimeTem),
    }
    res := DB.Model(AdminsLog{}).Create(&admins_log)

    if res.RowsAffected == 1{
        return true
    }
    return false
}

//删除日志
func AdminLogDel(c *gin.Context) (bool,string) {
    //判断权限
    lid := c.PostForm("id")
    res := DB.Delete(AdminsLog{},lid)
    if res.Error != nil{
        return false,res.Error.Error()
    }
    return true,"删除成功"
}
func AdminLogDelBatch(c *gin.Context) (bool,string) {
    //判断权限
    var ids []string
    lid := c.PostForm("ids")
    ids = strings.Split(lid,",")

    res := DB.Model(AdminsLog{}).Where(" id in ?", ids).Delete(&AdminsLog{})
    if res.Error != nil{
        return false,res.Error.Error()
    }
    return true,"删除成功"
}

写入日志调用代码: admins/middleware/adminMid.go

写入管理员日志,是在中间件中调用的。这样能接受到所有请求,并进行调用

 //记录日志

modes.AddAdminLog(admins.AdminUid, c)

管理员日志列表视图:admin_log_list.html

<article class="cl pd-20">
            <form method="get" action="/admin/admin_log">
            <div class="text-c">

                日期范围:
                <input type="text" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmax\')||\'%y-%M-%d\'}'})" id="logmin" class="input-text Wdate" style="width:120px;" name="start_date" value="{{.start_date}}">
                -
                <input type="text" onfocus="WdatePicker({minDate:'#F{$dp.$D(\'logmin\')}',maxDate:'%y-%M-%d'})" id="logmax" class="input-text Wdate" style="width:120px;" name="end_date" value="{{.end_date}}">
                <input type="text" name="admin_uname" id="admin_uname" value="{{.admin_uname}}" placeholder=" 管理员账号" style="width:250px" class="input-text">
                <input type="text" name="ip_addr" id="ip_addr" value="{{.ip_addr}}" placeholder=" IP地址 " style="width:250px" class="input-text">
                <button name="" id="" class="btn btn-success" type="submit"><i class="Hui-iconfont">&#xe665;</i> 搜资讯</button>
            </div>
            </form>
            <div class="cl pd-5 bg-1 bk-gray mt-20">
                <span class="l">
                    {{ $admin_uid := GetAdminId}}

                    <a href="javascript:;" {{if has_powa $admin_uid "/admin/admin_log_delbatch"}} style="display:none" {{end}}  onclick="datadel()" class="btn btn-danger radius"><i class="Hui-iconfont">&#xe6e2;</i> 批量删除</a>
                </span>
                <span class="r">共有数据:<strong>{{.count}}</strong> 条</span>
            </div>
            <div class="mt-20">
                <table class="table table-border table-bordered table-bg table-hover table-sort">
                    <thead>
                    <tr class="text-c">
                        <th width="25"><input type="checkbox" name="" id="checkAll" value=""></th>
                        <th width="80">ID</th>
                        <th  width="120">管理员账号</th>
                        <th width="150">请求地址</th>
                        <th width="80">请求方式</th>
                        <th >请求参数</th>
                        <th width="110">IP地址</th>
                        <th width="120">添加时间</th>
                        <th width="120">操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    {{ range $k,$v1 := .list}}
                    <tr class="text-c">
                        <td><input type="checkbox" value="{{$v1.Id}}" name="lids"></td>
                        <td>{{$v1.Id}}</td>
                        <td >{{AdminsUname $v1.AdminUid}}</td>
                        <td>{{$v1.RequestUrl}}</td>
                        <td>{{$v1.RequestMethod}}</td>
                        <td class="text-l">{{$v1.RequestParams}}</td>
                        <td>{{$v1.IpAddr}}</td>
                        <td >{{$v1.AddDatetime}}</td>
                        <td class="f-14 td-manage">
                           <a class="ml-5" {{if has_powa $admin_uid "/admin/admin_log_del"}} style="display:none" {{end}}  onClick="article_del(this,{{$v1.Id}})" href="javascript:;" title="删除"><i class="Hui-iconfont">&#xe6e2;</i></a></td>
                    </tr>
                    {{end}}

                    </tbody>
                </table>
            </div>
        </article>

<script type="text/javascript">
    $('.table-sort').dataTable({
        "aaSorting": [[ 1, "desc" ]],//默认第几个排序
        "bStateSave": true,//状态保存
        "aoColumnDefs": [
            //{"bVisible": true, "aTargets": [ 3,4,5 ]} ,//控制列的隐藏显示
            {"orderable":false,"aTargets":[0,8]}// 不参与排序的列
        ]
    });


    $("#checkAll").click(function (){
        if($("#checkAll").prop("checked")==true){

            $("input[name='lids']").each(function(){
                $(this).prop("checked",true)
            })
        }else{

            $("input[name='lids']").each(function(){
                $(this).prop("checked",false)
            })
        }
    })
    //批量删除
    function datadel(){
        var chk_value = []
        var flag = 0
        $("input[name='lids']").each(function (){
            if ($(this).prop("checked") == true){
                flag = 1
                chk_value.push($(this).val())
            }
        })
        if (flag == 0){
            layer.alert("请先选择要删除的记录")
        }else{
            var slected = chk_value.join(",")
            $.post("/admin/admin_log_delbatch",{ids:slected},function (data){
                if (data.code == 0){
                    layer.msg('已批量删除!',{icon:1,time:1000});
                    window.location.reload()
                }else{
                    layer.alert("批量删除失败")
                }
            },'json')
        }

    }

    /*资讯-删除*/
    function article_del(obj,id){
        layer.confirm('确认要删除吗?',function(index){
            $.ajax({
                type: 'POST',
                url: '/admin/admin_log_del',
                dataType: 'json',
                data:{id:id},
                success: function(data){
                    if (data.code == 0){
                        $(obj).parents("tr").remove();
                        layer.msg('已删除!',{icon:1,time:1000});
                    }else{
                        layer.alert("删除失败")
                    }

                },
                error:function(data) {
                    console.log(data.msg);
                },
            });
        });
    }

</script>

完结

 

标签:管理中心,string,admin,res,管理员,date,日志,true
From: https://www.cnblogs.com/ypeih/p/17344315.html

相关文章

  • 管理中心,文章分类管理,文章管理,文件上传,文章回收站
    前言:文章分类管理,文章管理,文章回收站正文: 分类管理效果: 添加分类: 文章列表效果: 添加文章效果: 文章回收站效果: 控制器代码:admins/controllers/news.go//文章分类列表funcNewsCateList(c*gin.Context){list:=modes.NewsCateList(c)c.HTML......
  • 统一日志处理
    resources目录下新建logback-spring.xml<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="10seconds"><!--日志级别从低到高分为TRACE<DEBUG<INFO<WARN<ERROR<FA......
  • K8s 日志高效查看神器,提升运维效率10倍!
    通常情况下,在部署了 K8S 服务之后,为了更好地监控服务的运行情况,都会接入对应的日志系统来进行检测和分析,比如常见的 Filebeat+ElasticSearch+Kibana 这一套组合来完成。虽然该组合可以满足我们对于服务监控的要求,但是如果只是部署一个内部单服务用的话,未免显得大材小用,而且......
  • cmd默认管理员身份运行
    1.在开始菜单搜索框里输入secpol或本地安全策略或运行secpol.msc,右键单击以管理员身份打开。win+R输入secpol.msc2.展开本地策略,选择安全选项,然后在右侧找到用户帐户控制:以管理员批准模式运行所有管理员,双击以将本地安全设置更改为禁用。3.重启计算机......
  • 若依RuoYi框架浅析 基础篇①——日志logs本地保存
    文章目录日志保存位置在/home/ruoyi/logs/[root@iZ2ze30dygwd6yh7gu6lskZlogs]#cd/home/ruoyi/logs/[root@iZ2ze30dygwd6yh7gu6lskZlogs]#lssys-error.2021-02-28.logsys-error.logsys-info.2021-02-28.logsys-info.2021-03-01.logsys-info.logsys-user.2021-0......
  • (转)跟我一起学Go系列:日志系统从入门到晋级
    原文:https://zhuanlan.zhihu.com/p/361930459日志模块在如今的应用中地位是如日中天,开发者没有日志就相当于双目失明,对程序的运行状态无法判断。Go也不例外提供了基础的日志调用模块:log模块。log模块主要提供了3类接口,分别是“Print、Panic、Fatal”,下面一起看看基础日......
  • Linux安装基于rsyslog+loganalyzer的日志系统
    一、 关闭防火墙和selinuxsetenforce0vim/etc/selinux/config将配置文件中的SELINUX=enforcing 修改为systemctl stop firewalldsystemctl status firewalldsystemctl disable firewalld二、安装LAMPyuminstallmysql-servermysql-develhttpdphp-mysql phpphp-gdp......
  • tomcat提示静态文件缓存超限,造成日志爆满的问题
    日志片段:21-Apr-202311:20:47.215警告[http-nio-80-exec-5308]org.apache.catalina.webresources.Cache.getResourceUnabletoaddtheresourceat[/FileUploads/www/site/2022/11/30/ZZVRQAHD08ZX4GOW47.jpg]tothecacheforwebapplication[]becausetherewasin......
  • 快速清空日志文件
    在做日志服务时,经过遇到百个1G以上的文件需要及时删除,暂不考虑lograte滚动日志服务来解决。先回顾常用命令:1、["ipaddshowdevens160"]&&echo"haveens160"||echo"noens160"   ##测试有无ens160网卡,如果有输出have,如果没有输出no2、......
  • LogBack 没有打印日志
    背景:某日进行测试,新增了一行日志(项目使用的是logback)报错:无,就是不打印日志解决:经过仔细查看代码,发现之前的人写代码的时候在其它类里面,将privatefinalLoggerlog=LoggerFactory.getLogger(XXXX.class);在Logger工厂中,获取静态绑定的Logger实......