package user import ( "context" "time" authHelper "perms-system-server/internal/logic/auth" "perms-system-server/internal/middleware" "perms-system-server/internal/model/userrole" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/types" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" ) type BindRolesLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewBindRolesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BindRolesLogic { return &BindRolesLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *BindRolesLogic) BindRoles(req *types.BindRolesReq) error { if _, err := l.svcCtx.SysUserModel.FindOne(l.ctx, req.UserId); err != nil { return response.ErrNotFound("用户不存在") } productCode := middleware.GetProductCode(l.ctx) if err := authHelper.CheckManageAccess(l.ctx, l.svcCtx, req.UserId, productCode); err != nil { return err } if err := l.svcCtx.SysUserRoleModel.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error { if err := l.svcCtx.SysUserRoleModel.DeleteByUserIdTx(ctx, session, req.UserId); err != nil { return err } if len(req.RoleIds) == 0 { return nil } now := time.Now().Unix() data := make([]*userrole.SysUserRole, 0, len(req.RoleIds)) for _, roleId := range req.RoleIds { data = append(data, &userrole.SysUserRole{ UserId: req.UserId, RoleId: roleId, CreateTime: now, UpdateTime: now, }) } return l.svcCtx.SysUserRoleModel.BatchInsertWithTx(ctx, session, data) }); err != nil { return err } l.svcCtx.UserDetailsLoader.Del(l.ctx, req.UserId, productCode) return nil }