caipin 4 years ago
parent
commit
fdc17a1356

+ 2 - 0
services/backstage_service.go

@@ -11,6 +11,7 @@ import (
 	"log"
 	"log"
 	"net/http"
 	"net/http"
 	"net/url"
 	"net/url"
+	"strconv"
 	"time"
 	"time"
 
 
 	"github.com/kataras/iris/v12"
 	"github.com/kataras/iris/v12"
@@ -268,6 +269,7 @@ func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer h
 	params.Add("identity", identity)
 	params.Add("identity", identity)
 	params.Add("attachedIdentity", category)
 	params.Add("attachedIdentity", category)
 	params.Add("digitalToken", digitalToken)
 	params.Add("digitalToken", digitalToken)
+	params.Add("manager", strconv.Itoa(managerData.IsAdmin))
 	c := &http.Cookie{
 	c := &http.Cookie{
 		Name:     "cmBackstage",
 		Name:     "cmBackstage",
 		Value:    params.Encode(),
 		Value:    params.Encode(),

+ 11 - 3
services/project_account_service.go

@@ -38,7 +38,7 @@ type ProjectAccountService interface {
 	GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount
 	GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount
 	Search(name string, projectId int) []viewmodels.ProjectAccount
 	Search(name string, projectId int) []viewmodels.ProjectAccount
 	AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error
 	AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error
-	SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
+	SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int, manager *models.CmManager) error
 	Add(viewAccount viewmodels.ProjectAccount, projectId int) error
 	Add(viewAccount viewmodels.ProjectAccount, projectId int) error
 	Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
 	Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
 	SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
 	SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
@@ -325,10 +325,18 @@ func (s *projectAccountService) AddBs(viewAccount viewmodels.ProjectAccount, pro
 }
 }
 
 
 // 保存用户信息
 // 保存用户信息
-func (s *projectAccountService) SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
+func (s *projectAccountService) SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int, manager *models.CmManager) error {
+
+	// 1.获得项目信息
+	projectDao := dao.NewProjectDao(datasource.InstanceDbMaster())
+	projectData, _ := projectDao.FindById(id)
+	if manager.Username != projectData.StaffName {
+		return errors.New("无权编辑")
+	}
 
 
 	account := models.CmProjectAccount{}
 	account := models.CmProjectAccount{}
 	updateField := []string{"name", "company", "position", "telephone", "account_group"}
 	updateField := []string{"name", "company", "position", "telephone", "account_group"}
+
 	// 是否重新设置管理员
 	// 是否重新设置管理员
 	if viewAccount.IsAdmin == 1 {
 	if viewAccount.IsAdmin == 1 {
 		account.IsAdmin = viewAccount.IsAdmin
 		account.IsAdmin = viewAccount.IsAdmin
@@ -372,7 +380,7 @@ func (s *projectAccountService) updateAdminZero(projectId int) error {
 func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
 func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
 
 
 	// 验证该项目下是否有同名账号
 	// 验证该项目下是否有同名账号
-	accountValid := s.dao.GetAccount(viewAccount.Account)
+	accountValid := s.dao.GetAccountProjectId(viewAccount.Account, projectId)
 	if accountValid.Id != 0 {
 	if accountValid.Id != 0 {
 		return errors.New("已存在相同的账号")
 		return errors.New("已存在相同的账号")
 	}
 	}

+ 12 - 2
services/project_service.go

@@ -35,7 +35,7 @@ type ProjectService interface {
 	GetName(code string) []viewmodels.Project
 	GetName(code string) []viewmodels.Project
 	Save(projectId int, projectVM viewmodels.Project) error
 	Save(projectId int, projectVM viewmodels.Project) error
 	Add(projectVM viewmodels.Project) error
 	Add(projectVM viewmodels.Project) error
-	SaveBs(projectVM viewmodels.Project, id int) error
+	SaveBs(projectVM viewmodels.Project, id int, manager *models.CmManager) error
 	GetListBs(pageData viewmodels.ProjectPage, staffName string) (data []viewmodels.Project, total int64)
 	GetListBs(pageData viewmodels.ProjectPage, staffName string) (data []viewmodels.Project, total int64)
 }
 }
 
 
@@ -222,7 +222,17 @@ func (s *projectService) Add(projectVM viewmodels.Project) error {
 }
 }
 
 
 // 更新项目-后台
 // 更新项目-后台
-func (s *projectService) SaveBs(projectVM viewmodels.Project, id int) error {
+func (s *projectService) SaveBs(projectVM viewmodels.Project, id int, manager *models.CmManager) error {
+
+	// 1.获得项目信息
+	projectData, _ := s.dao.FindById(id)
+	// 管理员和自己可以更新
+	if manager.IsAdmin != 1 {
+		if manager.Username != projectData.StaffName {
+			return errors.New("无权编辑")
+		}
+	}
+
 	project := &models.CmProject{}
 	project := &models.CmProject{}
 	project.Id = id
 	project.Id = id
 	project.Name = projectVM.Name
 	project.Name = projectVM.Name

+ 5 - 1
web/backstage/project_account_bs.go

@@ -10,6 +10,7 @@ import (
 	"fmt"
 	"fmt"
 
 
 	"github.com/kataras/iris/v12"
 	"github.com/kataras/iris/v12"
+	"go.mod/models"
 	"go.mod/services"
 	"go.mod/services"
 	"go.mod/web/utils"
 	"go.mod/web/utils"
 	"go.mod/web/viewmodels"
 	"go.mod/web/viewmodels"
@@ -203,7 +204,10 @@ func (c *ProjectAccountBs) PostSave() {
 		return
 		return
 	}
 	}
 
 
-	err = c.ServiceProjectAccount.SaveBs(accountData, id, projectId)
+	// 获得登陆的管理员
+	manager := c.Ctx.Values().Get("manager").(*models.CmManager)
+
+	err = c.ServiceProjectAccount.SaveBs(accountData, id, projectId, manager)
 	if err != nil {
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return
 		return

+ 5 - 1
web/backstage/project_bs.go

@@ -11,6 +11,7 @@ import (
 	"log"
 	"log"
 
 
 	"github.com/kataras/iris/v12"
 	"github.com/kataras/iris/v12"
+	"go.mod/models"
 	"go.mod/services"
 	"go.mod/services"
 	"go.mod/web/utils"
 	"go.mod/web/utils"
 	"go.mod/web/viewmodels"
 	"go.mod/web/viewmodels"
@@ -227,8 +228,11 @@ func (c *ProjectBs) PostSave() {
 		return
 		return
 	}
 	}
 
 
+	// 获得登陆的管理员
+	manager := c.Ctx.Values().Get("manager").(*models.CmManager)
+
 	// 新增项目信息
 	// 新增项目信息
-	err = c.ServiceProject.SaveBs(projectData, id)
+	err = c.ServiceProject.SaveBs(projectData, id, manager)
 	if err != nil {
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return
 		return

+ 43 - 0
web/middleware/access_backstage.go

@@ -0,0 +1,43 @@
+/*
+ * @description: 访问中间件
+ * @Author: CP
+ * @Date: 2021-06-04 10:27:02
+ * @FilePath: \construction_management\web\middleware\access_backstage.go
+ */
+package middleware
+
+import (
+	"github.com/kataras/iris/v12"
+	"go.mod/dao"
+	"go.mod/datasource"
+)
+
+func AccessBackstageAuth(ctx iris.Context) {
+	// 1.获得登陆后台成员信息
+	staffName := ctx.Values().Get("StaffName").(string)
+	managerDao := dao.NewManagerDao(datasource.InstanceDbMaster())
+	managerData := managerDao.GetUserName(staffName)
+
+	// 2.特定路由下的访问权限
+	path := ctx.Path()
+	// 新增项目
+	if path == "/api/backstage/project/add" {
+		if managerData.IsAdmin != 1 {
+			ctx.JSON(iris.Map{"code": 2, "msg": "管理员才能新增项目"})
+			return
+		}
+	}
+
+	// 编辑项目-只有管理员和自己能编辑项目
+	if path == "/api/backstage/project/save" {
+		if managerData.IsAdmin != 1 {
+
+			ctx.JSON(iris.Map{"code": 2, "msg": "管理员才能新增项目"})
+			return
+		}
+	}
+
+	ctx.ViewData("manager", managerData)
+
+	ctx.Next()
+}

+ 2 - 0
web/routes/routes.go

@@ -217,6 +217,7 @@ func Configure(b *bootstrap.Bootstrapper) {
 	backstageProjectCM.Register(ProjectService)
 	backstageProjectCM.Register(ProjectService)
 	backstageProjectCM.Register(backstageService)
 	backstageProjectCM.Register(backstageService)
 	backstageProjectCM.Router.Use(middleware.SessionsBackstageAuth)
 	backstageProjectCM.Router.Use(middleware.SessionsBackstageAuth)
+	backstageProjectCM.Router.Use(middleware.AccessBackstageAuth)
 	backstageProjectCM.Handle(new(backstage.ProjectBs))
 	backstageProjectCM.Handle(new(backstage.ProjectBs))
 
 
 	backstageAccountCM := mvc.New(b.Party("/api/backstage/account"))
 	backstageAccountCM := mvc.New(b.Party("/api/backstage/account"))
@@ -225,6 +226,7 @@ func Configure(b *bootstrap.Bootstrapper) {
 	backstageAccountCM.Register(BidAccountService)
 	backstageAccountCM.Register(BidAccountService)
 	backstageAccountCM.Register(backstageService)
 	backstageAccountCM.Register(backstageService)
 	backstageAccountCM.Router.Use(middleware.SessionsBackstageAuth)
 	backstageAccountCM.Router.Use(middleware.SessionsBackstageAuth)
+	backstageAccountCM.Router.Use(middleware.AccessBackstageAuth)
 	backstageAccountCM.Handle(new(backstage.ProjectAccountBs))
 	backstageAccountCM.Handle(new(backstage.ProjectAccountBs))
 
 
 	managerCM := mvc.New(b.Party("/api/backstage/manager"))
 	managerCM := mvc.New(b.Party("/api/backstage/manager"))