360 lines
9.3 KiB
Go
360 lines
9.3 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)) {
|
||
if err == nil && password == libs.Md5([]byte(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
|
||
}
|