init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
package srv_mwacc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
"videoweb/pub/common/errors"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/mwacc"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
// 删除角色
|
||||
func RoleDel(ctx context.Context, roleId int64) (bool, *srvdef.SrvErr) {
|
||||
|
||||
res, err := mwacc.FindOneRoleByFilter(ctx, bson.M{mwacc.FN.MwRole.Id: roleId})
|
||||
|
||||
if err != nil || res.Id == 0 {
|
||||
log.ZapLog.Error(fmt.Sprintf("search error %v", err))
|
||||
return false, err
|
||||
}
|
||||
|
||||
// 查询记录是否有账户
|
||||
roles, err1 := mwacc.RoleAggregate(ctx,
|
||||
[]bson.M{
|
||||
{"$match": bson.M{mwacc.FN.MwRole.Id: roleId}},
|
||||
{"$limit": 1},
|
||||
{"$lookup": bson.M{
|
||||
"localField": mwacc.FN.MwRole.Id,
|
||||
"from": mwacc.TN.MwAcc,
|
||||
"foreignField": mwacc.FN.MwAcc.RoleId,
|
||||
"as": "onlyRole",
|
||||
}},
|
||||
{"$unwind": "$onlyRole"},
|
||||
{"$project": bson.M{
|
||||
mwacc.FN.MwRole.Id: 1,
|
||||
"onlyRole.roleId": 1,
|
||||
}},
|
||||
})
|
||||
|
||||
if err1 != nil {
|
||||
log.Error("角色删除失败", log.Any("roleId", roleId))
|
||||
return false, srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
|
||||
if len(roles) > 0 {
|
||||
log.Error("角色删除失败", log.Any("roleId", roleId))
|
||||
return false, srvdef.New(srvdef.ErrDbDeleteError, "删除失败,此角色有帐户", "")
|
||||
}
|
||||
|
||||
serr := mwacc.DelRoleByFilter(ctx, bson.M{mwacc.FN.MwRole.Id: roleId})
|
||||
if serr != nil {
|
||||
return false, serr
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 获取信息
|
||||
func RoleGetInfo(ctx context.Context, roleId int64) (*mwacc.MwRole, error) {
|
||||
|
||||
rest, err := mwacc.FindOneRoleByFilter(ctx, bson.M{
|
||||
mwacc.FN.MwRole.Id: roleId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rest, nil
|
||||
}
|
||||
|
||||
// 角色id
|
||||
|
||||
// 角色更新
|
||||
func RoleUp(ctx context.Context, id int64, name string, desc string, isEnb bool) (ok bool, err error) {
|
||||
|
||||
roleCount, err := mwacc.RoleCountByFilter(ctx, bson.M{
|
||||
mwacc.FN.MwRole.Name: name,
|
||||
mwacc.FN.MwRole.Id: bson.M{
|
||||
"$ne": id,
|
||||
},
|
||||
})
|
||||
|
||||
if roleCount > 0 {
|
||||
err = errors.MakeWithMsg(errors.DBInsert, "角色名称已存在")
|
||||
return false, err
|
||||
}
|
||||
|
||||
err = mwacc.UpOneRoleByFilter(ctx, bson.M{
|
||||
mwacc.FN.MwRole.Id: id,
|
||||
}, bson.M{
|
||||
"$set": bson.M{
|
||||
mwacc.FN.MwRole.Name: name,
|
||||
mwacc.FN.MwRole.Desc: desc,
|
||||
mwacc.FN.MwRole.IsEnb: isEnb,
|
||||
mwacc.FN.MwRole.UpdatedAt: time.Now(),
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("RoleUp error %v", err))
|
||||
err = errors.MakeWithErr(errors.DBUpdate, err)
|
||||
return
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 设置角色状态
|
||||
func RoleEnable(ctx context.Context, roleId int64, IsEnb bool) (bool, *srvdef.SrvErr) {
|
||||
|
||||
rest, err := mwacc.FindOneRoleByFilter(ctx, bson.M{
|
||||
mwacc.FN.MwRole.Id: roleId,
|
||||
})
|
||||
|
||||
if err != nil || rest.Id == 0 {
|
||||
return false, err
|
||||
}
|
||||
// count, err := mwacc.RoleAggregate(ctx, []bson.M{
|
||||
// {"$match": bson.M{
|
||||
// mwacc.FN.MwRole.Id: roleId,
|
||||
// }},
|
||||
// {"$limit": 1},
|
||||
// {"$lookup": bson.M{
|
||||
// "localField": mwacc.FN.MwRole.Id,
|
||||
// "from": mwacc.TN.MwAcc,
|
||||
// "foreignField": mwacc.FN.MwAcc.RoleId,
|
||||
// "as": "onlyRole",
|
||||
// }},
|
||||
// {"$unwind": "$onlyRole"},
|
||||
// {"$project": bson.M{
|
||||
// "roleId": 1,
|
||||
// "onlyRole.roleId": 1,
|
||||
// }},
|
||||
// })
|
||||
data, err1 := mwacc.FindManyAccByFilter(ctx, bson.M{mwacc.FN.MwAcc.RoleId: roleId})
|
||||
if err1 != nil {
|
||||
return false, err1
|
||||
}
|
||||
|
||||
if len(data) > 0 && IsEnb == false {
|
||||
return false, srvdef.New(srvdef.ErrDbUpdateError, "更新失败,此角色下拥有管理员", "")
|
||||
}
|
||||
|
||||
StatusErr := mwacc.UpOneRoleByFilter(ctx, bson.M{
|
||||
mwacc.FN.MwRole.Id: roleId,
|
||||
}, bson.M{
|
||||
"$set": bson.M{
|
||||
mwacc.FN.MwRole.IsEnb: IsEnb,
|
||||
},
|
||||
})
|
||||
|
||||
if StatusErr != nil {
|
||||
return false, StatusErr
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// ////////////////////////////////////////////////////////////////////////////
|
||||
// 数据库Router转网站Router
|
||||
|
||||
// // 角色权限列表
|
||||
// func RoleAuthList(ctx context.Context, roleId int64) (*mwacc.MwRole, error) {
|
||||
// opt := &options.FindOneOptions{}
|
||||
// opt.SetProjection(bson.M{
|
||||
// mwacc.FN.MwRole.Id: 1,
|
||||
// mwacc.FN.MwRole.Router: 1,
|
||||
// })
|
||||
|
||||
// res, err := mwacc.FindOneRoleByFilter(ctx, bson.M{mwacc.FN.MwRole.Id: roleId})
|
||||
// if err != nil {
|
||||
// return &mwacc.MwRole{}, err
|
||||
// }
|
||||
// if res.Id != 0 {
|
||||
// return res, nil
|
||||
// }
|
||||
// return nil, nil
|
||||
// }
|
||||
|
||||
func handleMenu(ctx context.Context, reqRouter []*mwacc.Router, apiMap map[string]int64) map[string]int64 {
|
||||
|
||||
if apiMap == nil {
|
||||
apiMap = make(map[string]int64)
|
||||
}
|
||||
|
||||
for _, v := range reqRouter {
|
||||
if v.Children != nil && len(v.Children) != 0 {
|
||||
childs := make([]*mwacc.Router, 0)
|
||||
for _, v := range v.Children {
|
||||
childs = append(childs, &v)
|
||||
}
|
||||
apiMap = handleMenu(ctx, childs, apiMap)
|
||||
}
|
||||
if v.ApiUrl != nil && len(v.ApiUrl) != 0 {
|
||||
for _, v := range v.ApiUrl {
|
||||
if v.Status == true {
|
||||
for _, value := range v.Url {
|
||||
apiMap[value] = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return apiMap
|
||||
}
|
||||
|
||||
// 更新权限
|
||||
func UpAuth(ctx context.Context, id int64, dataRouter []*mwacc.Router) (ok bool, err error) {
|
||||
|
||||
apiMap := handleMenu(ctx, dataRouter, nil)
|
||||
|
||||
keys := make([]string, 0)
|
||||
for k := range apiMap {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
|
||||
return mwacc.UpRoleAuth(ctx, id, keys, dataRouter)
|
||||
}
|
||||
Reference in New Issue
Block a user