【用户无角色关联时,默认普通用户角色】
This commit is contained in:
parent
a373c33bc6
commit
daeaf08854
|
@ -55,6 +55,10 @@ const (
|
||||||
USER
|
USER
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func IsSystemRole(role int32) bool {
|
||||||
|
return role == int32(ADMIN) || role == int32(USER)
|
||||||
|
}
|
||||||
|
|
||||||
type AuthUserStorageDto struct {
|
type AuthUserStorageDto struct {
|
||||||
UID int32 `json:"uid" form:"uid"`
|
UID int32 `json:"uid" form:"uid"`
|
||||||
IsAdmin bool `json:"isAdmin" form:"isAdmin"`
|
IsAdmin bool `json:"isAdmin" form:"isAdmin"`
|
||||||
|
|
|
@ -87,8 +87,8 @@ func UpdateAuthRole(rid int32, info *dto.AuthRoleReqDto) bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err.Error()})
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err.Error()})
|
||||||
}
|
}
|
||||||
if role.Weight == int32(dto.ADMIN) {
|
if dto.IsSystemRole(role.Weight) {
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: "超级管理员不可编辑"})
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: "系统角色不可编辑"})
|
||||||
}
|
}
|
||||||
role.Name = info.Name
|
role.Name = info.Name
|
||||||
// 更新名称
|
// 更新名称
|
||||||
|
@ -117,8 +117,8 @@ func DeleteAuthRole(rid int32) bool {
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err1.Error()})
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err1.Error()})
|
||||||
}
|
}
|
||||||
if oldD.Weight == int32(dto.ADMIN) {
|
if dto.IsSystemRole(oldD.Weight) {
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: "超级管理员不可删除"})
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: "系统角色不可删除"})
|
||||||
}
|
}
|
||||||
// 如果有用户关联则不删除
|
// 如果有用户关联则不删除
|
||||||
count, err2 := dbquery.AuthRoleUser.Where(dbquery.AuthRoleUser.Rid.Eq(rid)).Count()
|
count, err2 := dbquery.AuthRoleUser.Where(dbquery.AuthRoleUser.Rid.Eq(rid)).Count()
|
||||||
|
@ -234,47 +234,49 @@ func UserLinkRole(linkInfo *dto.AuthRoleUserReqDto) bool {
|
||||||
|
|
||||||
// 查询用户权限信息
|
// 查询用户权限信息
|
||||||
func QueryUserAuthApiPath(uid int32) *dto.AuthUserStorageDto {
|
func QueryUserAuthApiPath(uid int32) *dto.AuthUserStorageDto {
|
||||||
linkRids, err1 := dbquery.AuthRoleUser.Where(dbquery.AuthRoleUser.UID.Eq(uid)).Find()
|
linkRids, err1 := dbquery.AuthRoleUser.Distinct(dbquery.AuthRoleUser.Rid).Where(dbquery.AuthRoleUser.UID.Eq(uid)).Find()
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err1.Error()})
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err1.Error()})
|
||||||
}
|
}
|
||||||
authUser := &dto.AuthUserStorageDto{UID: uid, IsAdmin: false}
|
authUser := &dto.AuthUserStorageDto{UID: uid, IsAdmin: false}
|
||||||
rn := len(linkRids)
|
rn := len(linkRids) // 查询用户角色
|
||||||
|
roleQuery := dbquery.AuthRole.Where()
|
||||||
if rn > 0 {
|
if rn > 0 {
|
||||||
rids := make([]int32, rn)
|
rids := make([]int32, rn)
|
||||||
for i, r := range linkRids {
|
for i, r := range linkRids {
|
||||||
rids[i] = r.Rid
|
rids[i] = r.Rid
|
||||||
}
|
}
|
||||||
authUser.RoleIds = rids // 用户角色ID
|
authUser.RoleIds = rids // 用户角色ID
|
||||||
// 查询用户角色信息
|
roleQuery = roleQuery.Where(dbquery.AuthRole.ID.In(rids...))
|
||||||
roles, err2 := dbquery.AuthRole.Where(dbquery.AuthRole.ID.In(rids...)).Find()
|
}
|
||||||
if err2 != nil {
|
// 查询用户角色信息
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err2.Error()})
|
roles, err2 := roleQuery.Or(dbquery.AuthRole.Weight.Eq(int32(dto.USER))).Find()
|
||||||
|
if err2 != nil {
|
||||||
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err2.Error()})
|
||||||
|
}
|
||||||
|
// 判断是否是管理员
|
||||||
|
rids := make([]int32, len(roles))
|
||||||
|
for i, r := range roles {
|
||||||
|
rids[i] = r.ID
|
||||||
|
authUser.IsAdmin = authUser.IsAdmin || (r.Weight == int32(dto.ADMIN))
|
||||||
|
}
|
||||||
|
if !authUser.IsAdmin { // 非管理员时,查询角色权限路径
|
||||||
|
// 查询角色与路径关联信息
|
||||||
|
linkPids, err3 := dbquery.AuthRoleAPIPath.Distinct(dbquery.AuthRoleAPIPath.Pid).Where(dbquery.AuthRoleAPIPath.Rid.In(rids...)).Find()
|
||||||
|
if err3 != nil {
|
||||||
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err3.Error()})
|
||||||
}
|
}
|
||||||
// 判断是否是管理员
|
pn := len(linkPids)
|
||||||
for _, r := range roles {
|
if pn > 0 {
|
||||||
authUser.IsAdmin = (authUser.IsAdmin || (r.Weight == int32(dto.ADMIN)))
|
pids := make([]int32, pn)
|
||||||
}
|
for i, r := range linkPids {
|
||||||
// 非管理员时,查询角色权限路径
|
pids[i] = r.Pid
|
||||||
if !authUser.IsAdmin {
|
|
||||||
// 查询角色与路径关联信息
|
|
||||||
linkPids, err3 := dbquery.AuthRoleAPIPath.Distinct(dbquery.AuthRoleAPIPath.Pid).Where(dbquery.AuthRoleAPIPath.Rid.In(rids...)).Find()
|
|
||||||
if err3 != nil {
|
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err3.Error()})
|
|
||||||
}
|
}
|
||||||
pn := len(linkPids)
|
apiPaths, err4 := dbquery.AuthAPIPath.Where(dbquery.AuthAPIPath.ID.In(pids...)).Find()
|
||||||
if pn > 0 {
|
if err4 != nil {
|
||||||
pids := make([]int32, pn)
|
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err4.Error()})
|
||||||
for i, r := range linkPids {
|
|
||||||
pids[i] = r.Pid
|
|
||||||
}
|
|
||||||
apiPaths, err4 := dbquery.AuthAPIPath.Where(dbquery.AuthAPIPath.ID.In(pids...)).Find()
|
|
||||||
if err4 != nil {
|
|
||||||
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err4.Error()})
|
|
||||||
}
|
|
||||||
// 赋值路径数组
|
|
||||||
authUser.AuthPaths = dto.ConvertFromAuthPath(apiPaths)
|
|
||||||
}
|
}
|
||||||
|
authUser.AuthPaths = dto.ConvertFromAuthPath(apiPaths) // 赋值路径数组
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return authUser
|
return authUser
|
||||||
|
|
|
@ -35,9 +35,6 @@ func Register(user *dto.RegisterUser) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
/* if user.Mobile == "" || len([]rune(user.Mobile)) != 13 {
|
|
||||||
panic("asdfasdf")
|
|
||||||
}*/
|
|
||||||
u := dbquery.User
|
u := dbquery.User
|
||||||
uq := u.Where()
|
uq := u.Where()
|
||||||
uq = uq.Where(u.Mobile.Eq(user.Mobile))
|
uq = uq.Where(u.Mobile.Eq(user.Mobile))
|
||||||
|
|
Loading…
Reference in New Issue