static->admin->js->base.js
$(function(){
    baseApp.init();
})
var baseApp={
    init:function(){
        this.initAside()
        this.confirmDelete()   
        this.resizeIframe()    
        this.changeStatus() 
    },
    initAside:function(){
        $('.aside h4').click(function(){                
            $(this).siblings('ul').slideToggle();
        })
    },
    //设置iframe的高度
    resizeIframe:function(){                    
        $("#rightMain").height($(window).height()-80)
    },
    // 删除提示
    confirmDelete:function(){
        $(".delete").click(function(){
            var flag=confirm("您确定要删除吗?")
            return flag
        })
    },
    changeStatus:function(){
        $(".chStatus").click(function(){
            var id=$(this).attr("data-id")
            var table=$(this).attr("data-table")
            var field=$(this).attr("data-field")
            var el =$(this)
            $.get("/admin/changeStatus",{id:id,table:table,field:field},function(response){                
                if(response.success){
                    if (el.attr("src").indexOf("yes")!=-1){
                        el.attr("src","/static/admin/images/no.gif")
                    }else{
                        el.attr("src","/static/admin/images/yes.gif")
                    }
                }
            })
        })
    }
}

templates->admin->role->index.html

{{ define "admin/role/index.html" }}
{{ template "admin/public/page_header.html" .}}
               
    <!--
        列表展示
    -->
    <div class="table-responsive">
        <table class="table table-bordered">
            <thead>
            <tr class="th">
                <th>角色名称</th>
                <th>角色名称</th>
                <th>角色状态</th>
             
                <th class="text-center">操作</th>
            </tr>
            </thead>
            <tbody>

             {{range $key,$value := .roleList}}   
            <tr>
                <td>{{$value.Title}}</td>               
                <td>{{$value.Description}}</td>
              
                <td align="center">
                    {{if eq $value.Status 1}}
                        <img class="chStatus" data-id="{{$value.Id}}" data-table="role" data-field="status" src="/static/admin/images/yes.gif" />
                    {{else}}
                        <img class="chStatus"  data-id="{{$value.Id}}" data-table="role" data-field="status" src="/static/admin/images/no.gif" />
                    {{end}}
                </td>
                           
                <td class="text-center">
                    <a href="/admin/role/auth?id={{$value.Id}}">授权</a> 
                    <a href="/admin/role/edit?id={{$value.Id}}">修改</a> 
                    <a class="delete" href="/admin/role/delete?id={{$value.Id}}">删除</a>
                </td>
            </tr>             
            {{end}}   
            </tbody>
        </table>
    </div>

</body>
</html>

{{end}}

controllers->admin->role.go

package admin

import (
	"fmt"
	"ginshop12/models"
	"net/http"
	"strings"

	"github.com/gin-gonic/gin"
)

type RoleController struct {
	BaseController
}

func (con RoleController) Index(c *gin.Context) {
	roleList := []models.Role{}
	models.DB.Find(&roleList)
	fmt.Println(roleList)
	c.HTML(http.StatusOK, "admin/role/index.html", gin.H{
		"roleList": roleList,
	})

}
func (con RoleController) Add(c *gin.Context) {
	c.HTML(http.StatusOK, "admin/role/add.html", gin.H{})
}
func (con RoleController) DoAdd(c *gin.Context) {

	title := strings.Trim(c.PostForm("title"), " ")
	description := strings.Trim(c.PostForm("description"), " ")

	if title == "" {
		con.Error(c, "角色的标题不能为空", "/admin/role/add")
		return
	}
	role := models.Role{}
	role.Title = title
	role.Description = description
	role.Status = 1
	role.AddTime = int(models.GetUnix())

	err := models.DB.Create(&role).Error
	if err != nil {
		con.Error(c, "增加角色失败 请重试", "/admin/role/add")
	} else {
		con.Success(c, "增加角色成功", "/admin/role")
	}

}
func (con RoleController) Edit(c *gin.Context) {

	id, err := models.Int(c.Query("id"))
	if err != nil {
		con.Error(c, "传入数据错误", "/admin/role")
	} else {
		role := models.Role{Id: id}
		models.DB.Find(&role)
		c.HTML(http.StatusOK, "admin/role/edit.html", gin.H{
			"role": role,
		})
	}

}
func (con RoleController) DoEdit(c *gin.Context) {

	id, err1 := models.Int(c.PostForm("id"))
	if err1 != nil {
		con.Error(c, "传入数据错误", "/admin/role")
		return
	}
	title := strings.Trim(c.PostForm("title"), " ")
	description := strings.Trim(c.PostForm("description"), " ")

	if title == "" {
		con.Error(c, "角色的标题不能为空", "/admin/role/edit")
	}

	role := models.Role{Id: id}
	models.DB.Find(&role)
	role.Title = title
	role.Description = description

	err2 := models.DB.Save(&role).Error
	if err2 != nil {
		con.Error(c, "修改数据失败", "/admin/role/edit?id="+models.String(id))
	} else {
		con.Success(c, "修改数据成功", "/admin/role/edit?id="+models.String(id))
	}

	//查询要修改的数据 然后 修改

	// c.String(http.StatusOK, "-执行修改")
}
func (con RoleController) Delete(c *gin.Context) {
	id, err := models.Int(c.Query("id"))
	if err != nil {
		con.Error(c, "传入数据错误", "/admin/role")
	} else {
		role := models.Role{Id: id}
		models.DB.Delete(&role)
		con.Success(c, "删除数据成功", "/admin/role")
	}
}

func (con RoleController) Auth(c *gin.Context) {
	//1、获取角色id
	roleId, err := models.Int(c.Query("id"))
	if err != nil {
		con.Error(c, "传入数据错误", "/admin/role")
		return
	}
	//2、获取所有的权限
	accessList := []models.Access{}
	models.DB.Where("module_id=?", 0).Preload("AccessItem").Find(&accessList)

	//3、获取当前角色拥有的权限 ,并把权限id放在一个map对象里面
	roleAccess := []models.RoleAccess{}
	models.DB.Where("role_id=?", roleId).Find(&roleAccess)
	roleAccessMap := make(map[int]int)
	for _, v := range roleAccess {
		roleAccessMap[v.AccessId] = v.AccessId
	}

	//4、循环遍历所有的权限数据,判断当前权限的id是否在角色权限的Map对象中,如果是的话给当前数据加入checked属性

	for i := 0; i < len(accessList); i++ {
		if _, ok := roleAccessMap[accessList[i].Id]; ok {
			accessList[i].Checked = true
		}
		for j := 0; j < len(accessList[i].AccessItem); j++ {
			if _, ok := roleAccessMap[accessList[i].AccessItem[j].Id]; ok {
				accessList[i].AccessItem[j].Checked = true
			}
		}
	}

	c.HTML(http.StatusOK, "admin/role/auth.html", gin.H{
		"roleId":     roleId,
		"accessList": accessList,
	})

}

func (con RoleController) DoAuth(c *gin.Context) {
	//获取角色id
	roleId, err1 := models.Int(c.PostForm("role_id"))
	if err1 != nil {
		con.Error(c, "传入数据错误", "/admin/role")
		return
	}
	//获取权限id  切片
	accessIds := c.PostFormArray("access_node[]")

	//删除当前角色对应的权限
	roleAccess := models.RoleAccess{}
	models.DB.Where("role_id=?", roleId).Delete(&roleAccess)

	//增加当前角色对应的权限
	for _, v := range accessIds {
		roleAccess.RoleId = roleId
		accessId, _ := models.Int(v)
		roleAccess.AccessId = accessId
		models.DB.Create(&roleAccess)
	}
	fmt.Println(roleId)
	fmt.Println(accessIds)

	fmt.Println("/admin/role/auth?id=?" + models.String(roleId))
	// c.String(200, "DoAuth")
	// admin/role/auth?id=9
	con.Success(c, "授权成功", "/admin/role/auth?id="+models.String(roleId))
}

  

posted on 2022-10-15 17:46  KOA2后端  阅读(35)  评论(0)    收藏  举报