base.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package nginx_controller
  2. import (
  3. "errors"
  4. "github.com/astaxie/beego/logs"
  5. "github.com/astaxie/beego/orm"
  6. "nginx-ui/server/base"
  7. "nginx-ui/server/models"
  8. "strconv"
  9. )
  10. type BaseController struct {
  11. base.Controller
  12. }
  13. // CheckNginxPermission 从path中获取nginx的参数
  14. func (c *BaseController) CheckNginxPermission() (*models.Nginx, error) {
  15. idStr := c.GetParam(":id")
  16. id, err := strconv.Atoi(idStr)
  17. if err != nil {
  18. logs.Warn("strconv.Atoi(idStr) fail", idStr)
  19. c.SetCode(-1).SetMsg("请传递正确的参数!").Json()
  20. return nil, err
  21. }
  22. return c.CheckNginxPermissionById(id)
  23. }
  24. // CheckNginxPermissionById 验证权限,如果无权操作该nginx,返回nil,否则返回
  25. func (c *BaseController) CheckNginxPermissionById(nginxId int) (*models.Nginx, error) {
  26. current := c.RequiredUser()
  27. if current == nil {
  28. base.WriteForbidden(c.Ctx.ResponseWriter)
  29. return nil, errors.New("当前未登录,无法操作")
  30. }
  31. if nginxId < 1 {
  32. c.SetCode(-1).SetMsg("Nginx ID must gt 0!").Json()
  33. return nil, errors.New("nginx ID must gt 0!")
  34. }
  35. nginx := models.Nginx{Id: nginxId}
  36. o := orm.NewOrm()
  37. err := o.Read(&nginx)
  38. if err != nil {
  39. c.ErrorJson(err)
  40. return nil, err
  41. }
  42. if !current.IsAdmin() && current.Account != nginx.Uid {
  43. c.Forbidden()
  44. return nil, errors.New("forbidden")
  45. }
  46. return &nginx, nil
  47. }