package role import ( "context" "time" authHelper "perms-system-server/internal/logic/auth" "perms-system-server/internal/model/roleperm" "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 BindRolePermsLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewBindRolePermsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BindRolePermsLogic { return &BindRolePermsLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *BindRolePermsLogic) BindRolePerms(req *types.BindPermsReq) error { if err := authHelper.RequireProductAdmin(l.ctx); err != nil { return err } role, err := l.svcCtx.SysRoleModel.FindOne(l.ctx, req.RoleId) if err != nil { return response.ErrNotFound("角色不存在") } if err := l.svcCtx.SysRolePermModel.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error { if err := l.svcCtx.SysRolePermModel.DeleteByRoleIdTx(ctx, session, req.RoleId); err != nil { return err } if len(req.PermIds) == 0 { return nil } now := time.Now().Unix() data := make([]*roleperm.SysRolePerm, 0, len(req.PermIds)) for _, permId := range req.PermIds { data = append(data, &roleperm.SysRolePerm{ RoleId: req.RoleId, PermId: permId, CreateTime: now, UpdateTime: now, }) } return l.svcCtx.SysRolePermModel.BatchInsertWithTx(ctx, session, data) }); err != nil { return err } affectedUserIds, _ := l.svcCtx.SysUserRoleModel.FindUserIdsByRoleId(l.ctx, req.RoleId) l.svcCtx.UserDetailsLoader.BatchDel(l.ctx, affectedUserIds, role.ProductCode) return nil }