145 lines
4.0 KiB
Go
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")
|
|
}
|