2021-09-11 14:04:09 +08:00
|
|
|
|
package api
|
2021-06-07 17:22:07 +08:00
|
|
|
|
|
|
|
|
|
|
import (
|
2022-06-02 17:41:11 +08:00
|
|
|
|
"mayfly-go/internal/sys/api/form"
|
|
|
|
|
|
"mayfly-go/internal/sys/api/vo"
|
|
|
|
|
|
"mayfly-go/internal/sys/application"
|
|
|
|
|
|
"mayfly-go/internal/sys/domain/entity"
|
|
|
|
|
|
"mayfly-go/pkg/ginx"
|
2023-01-14 16:29:52 +08:00
|
|
|
|
"mayfly-go/pkg/req"
|
2022-06-02 17:41:11 +08:00
|
|
|
|
"mayfly-go/pkg/utils"
|
2021-06-07 17:22:07 +08:00
|
|
|
|
"strconv"
|
|
|
|
|
|
"strings"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type Role struct {
|
2021-07-28 18:03:19 +08:00
|
|
|
|
RoleApp application.Role
|
|
|
|
|
|
ResourceApp application.Resource
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) Roles(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
g := rc.GinCtx
|
2023-06-28 21:35:03 +08:00
|
|
|
|
condition := &entity.Role{Name: g.Query("name")}
|
2021-06-07 17:22:07 +08:00
|
|
|
|
rc.ResData = r.RoleApp.GetPageList(condition, ginx.GetPageParam(g), new([]entity.Role))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 保存角色信息
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) SaveRole(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
g := rc.GinCtx
|
|
|
|
|
|
form := &form.RoleForm{}
|
|
|
|
|
|
ginx.BindJsonAndValid(g, form)
|
2022-07-14 11:39:12 +08:00
|
|
|
|
rc.ReqParam = form
|
2021-06-07 17:22:07 +08:00
|
|
|
|
|
|
|
|
|
|
role := new(entity.Role)
|
|
|
|
|
|
utils.Copy(role, form)
|
|
|
|
|
|
role.SetBaseInfo(rc.LoginAccount)
|
|
|
|
|
|
|
|
|
|
|
|
r.RoleApp.SaveRole(role)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 删除角色及其资源关联关系
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) DelRole(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
r.RoleApp.DeleteRole(uint64(ginx.PathParamInt(rc.GinCtx, "id")))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取角色关联的资源id数组,用于分配资源时回显已拥有的资源
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) RoleResourceIds(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
rc.ResData = r.RoleApp.GetRoleResourceIds(uint64(ginx.PathParamInt(rc.GinCtx, "id")))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 查看角色关联的资源树信息
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) RoleResource(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
g := rc.GinCtx
|
|
|
|
|
|
|
|
|
|
|
|
var resources vo.ResourceManageVOList
|
|
|
|
|
|
r.RoleApp.GetRoleResources(uint64(ginx.PathParamInt(g, "id")), &resources)
|
|
|
|
|
|
|
|
|
|
|
|
rc.ResData = resources.ToTrees(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 保存角色资源
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) SaveResource(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
g := rc.GinCtx
|
|
|
|
|
|
|
|
|
|
|
|
var form form.RoleResourceForm
|
|
|
|
|
|
ginx.BindJsonAndValid(g, &form)
|
|
|
|
|
|
rid := uint64(form.Id)
|
|
|
|
|
|
rc.ReqParam = form
|
|
|
|
|
|
|
|
|
|
|
|
// 将,拼接的字符串进行切割
|
|
|
|
|
|
idsStr := strings.Split(form.ResourceIds, ",")
|
2023-06-01 12:31:32 +08:00
|
|
|
|
var newIds []any
|
2021-06-07 17:22:07 +08:00
|
|
|
|
for _, v := range idsStr {
|
|
|
|
|
|
id, _ := strconv.Atoi(v)
|
|
|
|
|
|
newIds = append(newIds, uint64(id))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-06-01 12:31:32 +08:00
|
|
|
|
// 将[]uint64转为[]any
|
2021-06-07 17:22:07 +08:00
|
|
|
|
oIds := r.RoleApp.GetRoleResourceIds(uint64(form.Id))
|
2023-06-01 12:31:32 +08:00
|
|
|
|
var oldIds []any
|
2021-06-07 17:22:07 +08:00
|
|
|
|
for _, v := range oIds {
|
|
|
|
|
|
oldIds = append(oldIds, v)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-06-01 12:31:32 +08:00
|
|
|
|
addIds, delIds, _ := utils.ArrayCompare(newIds, oldIds, func(i1, i2 any) bool {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
return i1.(uint64) == i2.(uint64)
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
createTime := time.Now()
|
|
|
|
|
|
creator := rc.LoginAccount.Username
|
|
|
|
|
|
creatorId := rc.LoginAccount.Id
|
|
|
|
|
|
for _, v := range addIds {
|
|
|
|
|
|
rr := &entity.RoleResource{RoleId: rid, ResourceId: v.(uint64), CreateTime: &createTime, CreatorId: creatorId, Creator: creator}
|
|
|
|
|
|
r.RoleApp.SaveRoleResource(rr)
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, v := range delIds {
|
|
|
|
|
|
r.RoleApp.DeleteRoleResource(rid, v.(uint64))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|