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"
|
2024-12-16 23:29:18 +08:00
|
|
|
|
"mayfly-go/internal/sys/imsg"
|
2023-07-01 14:34:42 +08:00
|
|
|
|
"mayfly-go/pkg/biz"
|
2023-01-14 16:29:52 +08:00
|
|
|
|
"mayfly-go/pkg/req"
|
2023-07-21 17:07:04 +08:00
|
|
|
|
"mayfly-go/pkg/utils/collx"
|
2021-06-07 17:22:07 +08:00
|
|
|
|
"strings"
|
2024-03-21 17:15:52 +08:00
|
|
|
|
|
2025-06-27 12:17:45 +08:00
|
|
|
|
"github.com/spf13/cast"
|
2021-06-07 17:22:07 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type Role struct {
|
2024-12-16 23:29:18 +08:00
|
|
|
|
roleApp application.Role `inject:"T"`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (r *Role) ReqConfs() *req.Confs {
|
|
|
|
|
|
reqs := [...]*req.Conf{
|
|
|
|
|
|
req.NewGet("", r.Roles),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewPost("", r.SaveRole).Log(req.NewLogSaveI(imsg.LogRoleSave)).RequiredPermissionCode("role:add"),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewDelete(":id", r.DelRole).Log(req.NewLogSaveI(imsg.LogRoleDelete)).RequiredPermissionCode("role:del"),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewGet(":id/resourceIds", r.RoleResourceIds),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewGet(":id/resources", r.RoleResource),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewPost(":id/resources", r.SaveResource).Log(req.NewLogSaveI(imsg.LogAssignRoleResource)).RequiredPermissionCode("role:saveResources"),
|
|
|
|
|
|
|
|
|
|
|
|
req.NewGet(":id/accounts", r.RoleAccount),
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return req.NewConfs("sys/roles", reqs[:]...)
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) Roles(rc *req.Ctx) {
|
2025-05-24 16:22:54 +08:00
|
|
|
|
cond := req.BindQuery[*entity.RoleQuery](rc)
|
2023-12-18 22:39:32 +08:00
|
|
|
|
|
2024-02-25 12:46:18 +08:00
|
|
|
|
notIdsStr := rc.Query("notIds")
|
2023-12-18 22:39:32 +08:00
|
|
|
|
if notIdsStr != "" {
|
2025-05-20 21:04:47 +08:00
|
|
|
|
cond.NotIds = collx.ArrayMap(strings.Split(notIdsStr, ","), func(val string) uint64 {
|
|
|
|
|
|
return cast.ToUint64(val)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
ids := rc.Query("ids")
|
|
|
|
|
|
if ids != "" {
|
|
|
|
|
|
cond.Ids = collx.ArrayMap(strings.Split(ids, ","), func(val string) uint64 {
|
2024-03-21 17:15:52 +08:00
|
|
|
|
return cast.ToUint64(val)
|
2023-12-18 22:39:32 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-20 21:04:47 +08:00
|
|
|
|
res, err := r.roleApp.GetPageList(cond)
|
2023-10-26 17:15:49 +08:00
|
|
|
|
biz.ErrIsNil(err)
|
|
|
|
|
|
rc.ResData = res
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 保存角色信息
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) SaveRole(rc *req.Ctx) {
|
2025-05-24 16:22:54 +08:00
|
|
|
|
form, role := req.BindJsonAndCopyTo[*form.RoleForm, *entity.Role](rc)
|
2022-07-14 11:39:12 +08:00
|
|
|
|
rc.ReqParam = form
|
2021-06-07 17:22:07 +08:00
|
|
|
|
|
2024-12-16 23:29:18 +08:00
|
|
|
|
r.roleApp.SaveRole(rc.MetaCtx, role)
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 删除角色及其资源关联关系
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) DelRole(rc *req.Ctx) {
|
2024-02-25 12:46:18 +08:00
|
|
|
|
idsStr := rc.PathParam("id")
|
2023-10-12 21:50:55 +08:00
|
|
|
|
rc.ReqParam = collx.Kvs("ids", idsStr)
|
2023-07-01 14:34:42 +08:00
|
|
|
|
ids := strings.Split(idsStr, ",")
|
|
|
|
|
|
|
|
|
|
|
|
for _, v := range ids {
|
2024-12-16 23:29:18 +08:00
|
|
|
|
biz.ErrIsNil(r.roleApp.DeleteRole(rc.MetaCtx, cast.ToUint64(v)))
|
2023-07-01 14:34:42 +08:00
|
|
|
|
}
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取角色关联的资源id数组,用于分配资源时回显已拥有的资源
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) RoleResourceIds(rc *req.Ctx) {
|
2024-12-16 23:29:18 +08:00
|
|
|
|
rc.ResData = r.roleApp.GetRoleResourceIds(uint64(rc.PathParamInt("id")))
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 查看角色关联的资源树信息
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) RoleResource(rc *req.Ctx) {
|
2021-06-07 17:22:07 +08:00
|
|
|
|
var resources vo.ResourceManageVOList
|
2024-12-16 23:29:18 +08:00
|
|
|
|
r.roleApp.GetRoleResources(uint64(rc.PathParamInt("id")), &resources)
|
2021-06-07 17:22:07 +08:00
|
|
|
|
rc.ResData = resources.ToTrees(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 保存角色资源
|
2023-01-14 16:29:52 +08:00
|
|
|
|
func (r *Role) SaveResource(rc *req.Ctx) {
|
2025-05-24 16:22:54 +08:00
|
|
|
|
form := req.BindJsonAndValid[*form.RoleResourceForm](rc)
|
2021-06-07 17:22:07 +08:00
|
|
|
|
rc.ReqParam = form
|
|
|
|
|
|
|
2023-07-20 22:41:13 +08:00
|
|
|
|
// 将,拼接的字符串进行切割并转换
|
2023-07-21 17:07:04 +08:00
|
|
|
|
newIds := collx.ArrayMap[string, uint64](strings.Split(form.ResourceIds, ","), func(val string) uint64 {
|
2024-04-28 23:45:57 +08:00
|
|
|
|
return cast.ToUint64(val)
|
2023-07-20 22:41:13 +08:00
|
|
|
|
})
|
2021-06-07 17:22:07 +08:00
|
|
|
|
|
2024-12-16 23:29:18 +08:00
|
|
|
|
biz.ErrIsNilAppendErr(r.roleApp.SaveRoleResource(rc.MetaCtx, form.Id, newIds), "save role resource failed: %s")
|
2021-06-07 17:22:07 +08:00
|
|
|
|
}
|
2023-12-18 22:39:32 +08:00
|
|
|
|
|
|
|
|
|
|
// 查看角色关联的用户
|
|
|
|
|
|
func (r *Role) RoleAccount(rc *req.Ctx) {
|
2025-05-24 16:22:54 +08:00
|
|
|
|
cond := req.BindQuery[*entity.RoleAccountQuery](rc)
|
2024-02-25 12:46:18 +08:00
|
|
|
|
cond.RoleId = uint64(rc.PathParamInt("id"))
|
2025-05-20 21:04:47 +08:00
|
|
|
|
res, err := r.roleApp.GetRoleAccountPage(cond)
|
2023-12-18 22:39:32 +08:00
|
|
|
|
biz.ErrIsNil(err)
|
|
|
|
|
|
rc.ResData = res
|
|
|
|
|
|
}
|