Files
ppgo_job/controllers/common.go
georgehao 5fbc2bbe6e V2.8.1
修复几处bug
2021-05-18 00:31:24 +08:00

359 lines
9.2 KiB
Go

/**********************************************
** @Des: base controller
** @Author: haodaquan
** @Date: 2017-09-07 16:54:40
** @Last Modified by: haodaquan
** @Last Modified time: 2017-09-18 10:28:01
***********************************************/
package controllers
import (
"github.com/astaxie/beego"
"github.com/george518/PPGo_Job/libs"
"github.com/george518/PPGo_Job/models"
"strconv"
"strings"
)
const (
MSG_OK = 0
MSG_ERR = -1
)
type BaseController struct {
beego.Controller
controllerName string
actionName string
user *models.Admin
userId int
userName string
loginName string
pageSize int
allowUrl string
serverGroups string
taskGroups string
}
//前期准备
func (self *BaseController) Prepare() {
self.pageSize = 20
controllerName, actionName := self.GetControllerAndAction()
self.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10])
self.actionName = strings.ToLower(actionName)
self.Data["version"] = beego.AppConfig.String("version")
self.Data["siteName"] = beego.AppConfig.String("site.name")
self.Data["curRoute"] = self.controllerName + "." + self.actionName
self.Data["curController"] = self.controllerName
self.Data["curAction"] = self.actionName
// noAuth := "ajaxsave/ajaxdel/table/loginin/loginout/getnodes/start"
// isNoAuth := strings.Contains(noAuth, self.actionName)
//fmt.Println(self.controllerName)
//if (strings.Compare(self.controllerName, "apidoc")) != 0 {
//
//}
self.Auth()
self.Data["loginUserId"] = self.userId
self.Data["loginUserName"] = self.userName
}
//登录权限验证
func (self *BaseController) Auth() {
arr := strings.Split(self.Ctx.GetCookie("auth"), "|")
self.userId = 0
if len(arr) == 2 {
idstr, password := arr[0], arr[1]
userId, _ := strconv.Atoi(idstr)
if userId > 0 {
user, err := models.AdminGetById(userId)
if err == nil && password == libs.Md5([]byte(self.getClientIp()+"|"+user.Password+user.Salt)) {
self.userId = user.Id
self.loginName = user.LoginName
self.userName = user.RealName
self.user = user
self.AdminAuth()
self.dataAuth(user)
}
isHasAuth := strings.Contains(self.allowUrl, self.controllerName+"/"+self.actionName)
noAuth := "ajaxsave/table/loginin/loginout/getnodes/start/apitask/apistart/apipause"
isNoAuth := strings.Contains(noAuth, self.actionName)
if isHasAuth == false && isNoAuth == false {
if strings.Contains(self.actionName, "ajax") {
self.ajaxMsg("没有权限", MSG_ERR)
return
}
flash := beego.NewFlash()
flash.Error("没有权限")
flash.Store(&self.Controller)
return
}
}
}
if self.userId == 0 &&
(self.controllerName != "login" &&
self.actionName != "loginin" &&
self.actionName != "apistart" &&
self.actionName != "apitask" &&
self.actionName != "apipause" &&
self.actionName != "apisave" &&
self.actionName != "apistatus" &&
self.actionName != "apiget") {
self.redirect(beego.URLFor("LoginController.Login"))
}
}
func (self *BaseController) dataAuth(user *models.Admin) {
if user.RoleIds == "0" || user.Id == 1 {
return
}
Filters := make([]interface{}, 0)
Filters = append(Filters, "status", 1)
RoleIdsArr := strings.Split(user.RoleIds, ",")
RoleIds := make([]int, 0)
for _, v := range RoleIdsArr {
id, _ := strconv.Atoi(v)
RoleIds = append(RoleIds, id)
}
Filters = append(Filters, "id__in", RoleIds)
Result, _ := models.RoleGetList(1, 1000, Filters...)
serverGroups := ""
taskGroups := ""
for _, v := range Result {
serverGroups += v.ServerGroupIds + ","
taskGroups += v.TaskGroupIds + ","
}
self.serverGroups = strings.Trim(serverGroups, ",")
self.taskGroups = strings.Trim(taskGroups, ",")
}
func (self *BaseController) AdminAuth() {
// 左侧导航栏
filters := make([]interface{}, 0)
filters = append(filters, "status", 1)
if self.userId != 1 {
//普通管理员
adminAuthIds, _ := models.RoleAuthGetByIds(self.user.RoleIds)
adminAuthIdArr := strings.Split(adminAuthIds, ",")
filters = append(filters, "id__in", adminAuthIdArr)
}
result, _ := models.AuthGetList(1, 1000, filters...)
list := make([]map[string]interface{}, len(result))
list2 := make([]map[string]interface{}, len(result))
allow_url := ""
i, j := 0, 0
for _, v := range result {
if v.AuthUrl != " " || v.AuthUrl != "/" {
allow_url += v.AuthUrl
}
row := make(map[string]interface{})
if v.Pid == 1 && v.IsShow == 1 {
row["Id"] = int(v.Id)
row["Sort"] = v.Sort
row["AuthName"] = v.AuthName
row["AuthUrl"] = v.AuthUrl
row["Icon"] = v.Icon
row["Pid"] = int(v.Pid)
list[i] = row
i++
}
if v.Pid != 1 && v.IsShow == 1 {
row["Id"] = int(v.Id)
row["Sort"] = v.Sort
row["AuthName"] = v.AuthName
row["AuthUrl"] = v.AuthUrl
row["Icon"] = v.Icon
row["Pid"] = int(v.Pid)
list2[j] = row
j++
}
}
self.Data["SideMenu1"] = list[:i] //一级菜单
self.Data["SideMenu2"] = list2[:j] //二级菜单
self.allowUrl = allow_url + "/home/index"
}
// 是否POST提交
func (self *BaseController) isPost() bool {
return self.Ctx.Request.Method == "POST"
}
//获取用户IP地址
func (self *BaseController) getClientIp() string {
s := strings.Split(self.Ctx.Request.RemoteAddr, ":")
return s[0]
}
// 重定向
func (self *BaseController) redirect(url string) {
self.Redirect(url, 302)
self.StopRun()
}
//加载模板
func (self *BaseController) display(tpl ...string) {
var tplname string
if len(tpl) > 0 {
tplname = strings.Join([]string{tpl[0], "html"}, ".")
} else {
tplname = self.controllerName + "/" + self.actionName + ".html"
}
self.Layout = "public/layout.html"
self.TplName = tplname
}
//ajax返回
func (self *BaseController) ajaxMsg(msg interface{}, msgno int) {
out := make(map[string]interface{})
out["status"] = msgno
out["message"] = msg
self.Data["json"] = out
self.ServeJSON()
self.StopRun()
}
//ajax返回 列表
func (self *BaseController) ajaxList(msg interface{}, msgno int, count int64, data interface{}) {
out := make(map[string]interface{})
out["code"] = msgno
out["msg"] = msg
out["count"] = count
out["data"] = data
self.Data["json"] = out
self.ServeJSON()
self.StopRun()
}
//资源分组信息
func serverGroupLists(authStr string, adminId int) (sgl map[int]string) {
Filters := make([]interface{}, 0)
Filters = append(Filters, "status", 1)
if authStr != "0" && adminId != 1 {
serverGroupIdsArr := strings.Split(authStr, ",")
serverGroupIds := make([]int, 0)
for _, v := range serverGroupIdsArr {
id, _ := strconv.Atoi(v)
serverGroupIds = append(serverGroupIds, id)
}
Filters = append(Filters, "id__in", serverGroupIds)
}
groupResult, n := models.ServerGroupGetList(1, 1000, Filters...)
sgl = make(map[int]string, n)
for _, gv := range groupResult {
sgl[gv.Id] = gv.GroupName
}
//sgl[0] = "默认分组"
return sgl
}
func taskGroupLists(authStr string, adminId int) (gl map[int]string) {
groupFilters := make([]interface{}, 0)
groupFilters = append(groupFilters, "status", 1)
if authStr != "0" && adminId != 1 {
taskGroupIdsArr := strings.Split(authStr, ",")
taskGroupIds := make([]int, 0)
for _, v := range taskGroupIdsArr {
id, _ := strconv.Atoi(v)
taskGroupIds = append(taskGroupIds, id)
}
groupFilters = append(groupFilters, "id__in", taskGroupIds)
}
groupResult, n := models.GroupGetList(1, 1000, groupFilters...)
gl = make(map[int]string, n)
for _, gv := range groupResult {
gl[gv.Id] = gv.GroupName
}
return gl
}
func serverListByGroupId(groupId int) []string {
Filters := make([]interface{}, 0)
Filters = append(Filters, "status", 1)
Filters = append(Filters, "group_id", groupId)
Result, _ := models.TaskServerGetList(1, 1000, Filters...)
servers := make([]string, 0)
for _, v := range Result {
servers = append(servers, strconv.Itoa(v.Id), v.ServerName)
}
return servers
}
type AdminInfo struct {
Id int
Email string
Phone string
RealName string
}
func AllAdminInfo(adminIds string) []*AdminInfo {
Filters := make([]interface{}, 0)
Filters = append(Filters, "status", 1)
//Filters = append(Filters, "id__gt", 1)
var notifyUserIds []int
if adminIds != "0" && adminIds != "" {
notifyUserIdsStr := strings.Split(adminIds, ",")
for _, v := range notifyUserIdsStr {
i, _ := strconv.Atoi(v)
notifyUserIds = append(notifyUserIds, i)
}
Filters = append(Filters, "id__in", notifyUserIds)
}
Result, _ := models.AdminGetList(1, 1000, Filters...)
adminInfos := make([]*AdminInfo, 0)
for _, v := range Result {
ai := AdminInfo{
Id: v.Id,
Email: v.Email,
Phone: v.Phone,
RealName: v.RealName,
}
adminInfos = append(adminInfos, &ai)
}
return adminInfos
}
type serverList struct {
GroupId int
GroupName string
Servers map[int]string
}
func serverLists(authStr string, adminId int) (sls []serverList) {
serverGroup := serverGroupLists(authStr, adminId)
Filters := make([]interface{}, 0)
Filters = append(Filters, "status__in", []int{0, 1})
Result, _ := models.TaskServerGetList(1, 1000, Filters...)
for k, v := range serverGroup {
sl := serverList{}
sl.GroupId = k
sl.GroupName = v
servers := make(map[int]string)
for _, sv := range Result {
if sv.GroupId == k {
servers[sv.Id] = sv.ServerName
}
}
sl.Servers = servers
sls = append(sls, sl)
}
return sls
}