Files
ppgo_job/controllers/common.go
2019-07-03 22:31:27 +08:00

359 lines
9.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**********************************************
** @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/startapitask/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
}