Files
2019-08-08 17:13:34 +08:00

145 lines
4.0 KiB
Go

package controllers
import (
"anytunnel/at-admin/app/models"
"regexp"
"time"
"github.com/go-ozzo/ozzo-validation"
)
type PrivilegeController struct {
BaseAdminController
}
func (this *PrivilegeController) Delete() {
privilegeModel := models.Privilege{}
privilegeId := this.GetString("privilege_id")
privilege, err := privilegeModel.GetPrivilegeByPrivilegeId(privilegeId)
if err != nil {
this.jsonError(err)
}
hasSub, err := privilegeModel.HasSub(privilegeId)
if err != nil {
this.jsonError(err)
}
if privilege["type"] != "controller" && hasSub {
this.jsonError("子菜单非空,不能删除")
}
err = privilegeModel.Delete(privilegeId)
if err != nil {
this.jsonError(err)
}
this.jsonSuccess("")
}
func (this *PrivilegeController) Add() {
privilegeModel := models.Privilege{}
if this.Ctx.Input.IsPost() {
_, data := this.getPrivilegeFromPost(false)
_, err := privilegeModel.Insert(data)
if err != nil {
this.jsonError(err)
}
this.jsonSuccess("")
} else {
navigators, menus, _, err := privilegeModel.GetTypedPrivileges("1", "-1")
if err != nil {
this.jsonError(err, "")
}
this.Data["navigators"] = navigators
this.Data["menus"] = menus
this.Data["action"] = "add"
this.viewLayout("privilege/form", "form")
}
}
func (this *PrivilegeController) Edit() {
privilegeModel := models.Privilege{}
privilegeId := this.GetString("privilege_id")
if this.Ctx.Input.IsPost() {
_, data := this.getPrivilegeFromPost(true)
_, err := privilegeModel.Update(privilegeId, data)
if err != nil {
this.jsonError(err)
}
this.jsonSuccess("")
} else {
navigators, menus, _, err := privilegeModel.GetTypedPrivileges("1", "-1")
if err != nil {
this.jsonError(err, "")
}
privilege, err := privilegeModel.GetPrivilegeByPrivilegeId(privilegeId)
if err != nil {
this.jsonError(err, "")
}
if len(privilege) == 0 {
this.jsonError("权限不存在")
}
this.Data["privilege"] = privilege
this.Data["navigators"] = navigators
this.Data["menus"] = menus
this.Data["action"] = "edit"
this.viewLayout("privilege/form", "form")
}
}
func (this *PrivilegeController) getPrivilegeFromPost(isUpdate bool) (privilegeId string, privilege map[string]interface{}) {
parentId := 0
if this.GetString("type") == "menu" {
parentId, _ = this.GetInt("parent_n")
} else if this.GetString("type") == "controller" {
parentId, _ = this.GetInt("parent_m")
}
privilege = map[string]interface{}{
"name": this.GetString("name"),
"parent_id": parentId,
"type": this.GetString("type"),
"controller": this.GetString("controller"),
"action": this.GetString("action"),
"icon": this.GetString("icon"),
"is_display": this.GetString("is_display"),
"sequence": this.GetString("sequence"),
"target": this.GetString("target"),
}
err := validation.Errors{
"名称": validation.Validate(privilege["name"],
validation.Required.Error("不能为空"),
validation.Match(regexp.MustCompile("^.{1,15}$")).Error("长度必须是1-15字符")),
"类型": validation.Validate(privilege["type"],
validation.Required.Error("不能为空"),
validation.In("navigator", "menu", "controller").Error("错误")),
"排序": validation.Validate(privilege["sequence"],
validation.Required.Error("不能为空"),
validation.Match(regexp.MustCompile("^[1-9]{1}[0-9]*$")).Error("必须是大于0的数字")),
}.Filter()
if err != nil {
this.jsonError(err)
}
if isUpdate {
privilege["update_time"] = time.Now().Unix()
} else {
privilege["create_time"] = time.Now().Unix()
}
if this.GetString("type") != "controller" {
privilege["is_display"] = 1
}
return
}
// 权限列表
func (this *PrivilegeController) List() {
privilegeModel := new(models.Privilege)
navigators, menus, controllers, err := privilegeModel.GetTypedPrivileges("1", "-1")
if err != nil {
this.viewError(err.Error())
}
this.Data["navigators"] = navigators
this.Data["menus"] = menus
this.Data["controllers"] = controllers
this.view("privilege/list")
}