Browse Source

feat: 111

lanjianrong 4 years ago
parent
commit
79e0f7481c

+ 49 - 0
dao/permission_account_dao.go

@@ -8,10 +8,12 @@
 package dao
 
 import (
+	"encoding/json"
 	"errors"
 
 	"github.com/go-xorm/xorm"
 	"go.mod/models"
+	"go.mod/web/viewmodels"
 )
 
 //数据库操作引擎
@@ -67,3 +69,50 @@ func (d *PermissionAccountDao) Update(data *models.CmPermissionAccount, columns
 	}
 	return nil
 }
+
+// 获得当前账号下的标段权限
+func (d *PermissionAccountDao) GetPermissionWithAccountId(accountId int, bidsectionId int) (viewmodels.PermissionView, error) {
+	data := viewmodels.PermissionView{}
+	permission := viewmodels.Permission{}
+	has, err := d.engine.
+		Sql("select * from cm_permission_account where bidsection_id= ? and account_id = ?", accountId, bidsectionId).
+		Get(&data)
+	if has == false {
+		contractPermission := map[string]int{
+			"add":    permission.ContractAccess,
+			"delete": permission.ContractDelete,
+			"access": permission.ContractAccess,
+		}
+		contractPermissionByte, err := json.Marshal(contractPermission)
+		if err != nil {
+			return data, errors.New("合同权限解析失败")
+		}
+		contractPermissionStr := string(contractPermissionByte)
+
+		qualityPermission := map[string]int{
+			"add":    permission.QualityAdd,
+			"delete": permission.QualityDelete,
+			"access": permission.QualityAccess,
+		}
+		qualityPermissionByte, err := json.Marshal(qualityPermission)
+		if err != nil {
+			return data, errors.New("合同权限解析失败")
+		}
+		qualityPermissionStr := string(qualityPermissionByte)
+
+		safePermission := map[string]int{
+			"add":    permission.SafeAdd,
+			"delete": permission.SafeDelete,
+			"access": permission.SafeAccess,
+		}
+		safePermissionByte, err := json.Marshal(safePermission)
+		if err != nil {
+			return data, errors.New("合同权限解析失败")
+		}
+		safePermissionStr := string(safePermissionByte)
+		data.ContractPermission = contractPermissionStr
+		data.QualityPermission = qualityPermissionStr
+		data.SafePermission = safePermissionStr
+	}
+	return data, err
+}

+ 9 - 0
services/bid_account_service.go

@@ -23,6 +23,7 @@ type BidAccountService interface {
 	ValidRuleDelete(ctx iris.Context) (viewmodels.BidAccount, error)
 	Create(viewBidAccount viewmodels.BidAccount, projectId int, accountId int) error
 	Delete(viewBidAccount viewmodels.BidAccount, projectId int) error
+	GetPermission(accountId int, bidsectionId int) (viewmodels.PermissionView, error)
 }
 
 //返回service操作类
@@ -32,6 +33,7 @@ type bidAccountService struct {
 	bidsectionDao     *dao.BidsectionDao
 	treeDao           *dao.TreeDao
 	bidAccountDao     *dao.BidAccountDao
+	permissionDao     *dao.PermissionAccountDao
 }
 
 //创建项目用户service
@@ -42,6 +44,7 @@ func NewBidAccountService() BidAccountService {
 		bidsectionDao:     dao.NewBidsectionDao(datasource.InstanceDbMaster()),
 		treeDao:           dao.NewTreeDao(datasource.InstanceDbMaster()),
 		bidAccountDao:     dao.NewBidAccountDao(datasource.InstanceDbMaster()),
+		permissionDao:     dao.NewPermissionAccountDao(datasource.InstanceDbMaster()),
 	}
 }
 
@@ -79,6 +82,12 @@ func (s *bidAccountService) ValidRuleDelete(ctx iris.Context) (viewmodels.BidAcc
 	return bidAccountVaild, nil
 }
 
+// 获取当前标段的权限
+func (s *bidAccountService) GetPermission(accountId int, bidsectionId int) (viewmodels.PermissionView, error) {
+	data, err := s.permissionDao.GetPermissionWithAccountId(accountId, bidsectionId)
+	return data, err
+}
+
 // 新增标段于账号的关系
 func (s *bidAccountService) Create(viewBidAccount viewmodels.BidAccount, projectId int, loginAccountId int) error {
 	// 写入关系表-标段的成员数量-账号表中标段ID

+ 20 - 1
services/project_account_service.go

@@ -31,7 +31,7 @@ type ProjectAccountService interface {
 	ValidRuleChangePassword(ctx iris.Context) (viewmodels.AccountPassword, error)
 	ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error)
 	ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error)
-
+	ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error)
 	Get(accountId int, projectId int) *viewmodels.ProjectAccount
 	GetAll(projectId int) []viewmodels.ProjectAccount
 	GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount
@@ -155,6 +155,25 @@ func (s *projectAccountService) ValidRulePermission(ctx iris.Context) (viewmodel
 	return accountVaild, nil
 }
 
+// 用户规则验证
+func (s *projectAccountService) ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error) {
+	accountVaild := viewmodels.Permission{}
+	err := ctx.ReadForm(&accountVaild)
+	if err != nil {
+		log.Println("account-ValidRule-ReadForm转换异常, error=", err)
+		return accountVaild, err
+	}
+
+	err = accountVaild.ValidateSinglePermission()
+
+	if err != nil {
+		log.Println("权限验证, error=", err)
+		return accountVaild, err
+	}
+
+	return accountVaild, nil
+}
+
 // 验证编辑用户
 func (s *projectAccountService) ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error) {
 	accountVaild := viewmodels.ProjectAccount{}

+ 37 - 0
web/api/project_setting_auth_api.go

@@ -202,3 +202,40 @@ func (c *ProjectSettingApi) DeleteBidAccount() {
 		"msg":  "移除成功",
 	})
 }
+
+// @Summary 获得标段权限
+// @Tags 项目设置-标段成员权限-管理员
+// @Description 获得当前用户下当前标段的权限
+// @Accept  json
+// @Produce  json
+// @Security ApiKeyAuth
+// @Param   bidsectionId     path    string     false        "标段ID"
+// @Success 200 {object} viewmodels.PermissionView "{code:0成功,-1参数类错误,data:viewmodels.PermissionView,msg:错误信息}"
+// @Router /api/projectSetting/permission [get]
+func (c *ProjectSettingApi) GetPermission() {
+	// 1.验证消息
+	PermissionData, err := c.ServiceProjectAccount.ValidGetPermission(c.Ctx)
+	// 账号ID
+	accountId, err := utils.GetProjectAccountId(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
+	bidsectionId, err := utils.GetDecryptId(PermissionData.BidsectionId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
+	data, err := c.ServiceBidAccount.GetPermission(accountId, bidsectionId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	c.Ctx.JSON(iris.Map{
+		"code": 0,
+		"msg":  "请求成功",
+		"data": data,
+	})
+}

+ 11 - 0
web/viewmodels/permission.go

@@ -28,6 +28,12 @@ type Permission struct {
 	BidsectionType int `form:"bidsectionType" json:"bidsectionType"`
 }
 
+type PermissionView struct {
+	ContractPermission string `from:"contract_permission" json:"contract"`
+	QualityPermission  string `from:"quality_permission" json:"quality"`
+	SafePermission     string `from:"safe_permission" json:"safe"`
+}
+
 func (l Permission) Validate() error {
 	return validation.ValidateStruct(&l,
 		validation.Field(&l.BidsectionId, validation.Required.Error("标段ID不能为空")),
@@ -40,3 +46,8 @@ func (l Permission) ValidateType() error {
 		validation.Field(&l.BidsectionType, validation.In(0, 1, 2).Error("未找到相关请求类型")),
 	)
 }
+func (l Permission) ValidateSinglePermission() error {
+	return validation.ValidateStruct(&l,
+		validation.Field(&l.BidsectionId, validation.Required.Error("标段ID不能为空")),
+	)
+}