package role import ( "context" authHelper "perms-system-server/internal/logic/auth" "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 DeleteRoleLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewDeleteRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteRoleLogic { return &DeleteRoleLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } // DeleteRole 删除角色。在事务内同时清理角色-权限和用户-角色绑定关系后删除角色,并批量清理受影响用户的权限缓存。 func (l *DeleteRoleLogic) DeleteRole(req *types.DeleteRoleReq) error { role, err := l.svcCtx.SysRoleModel.FindOne(l.ctx, req.Id) if err != nil { return response.ErrNotFound("角色不存在") } if err := authHelper.RequireProductAdminFor(l.ctx, role.ProductCode); err != nil { return err } var affectedUserIds []int64 if err := l.svcCtx.SysRoleModel.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error { var err error affectedUserIds, err = l.svcCtx.SysUserRoleModel.FindUserIdsByRoleIdForUpdateTx(ctx, session, req.Id) if err != nil { return err } if err := l.svcCtx.SysRolePermModel.DeleteByRoleIdTx(ctx, session, req.Id); err != nil { return err } if err := l.svcCtx.SysUserRoleModel.DeleteByRoleIdTx(ctx, session, req.Id); err != nil { return err } return l.svcCtx.SysRoleModel.DeleteWithTx(ctx, session, req.Id) }); err != nil { return err } l.svcCtx.UserDetailsLoader.BatchDel(l.ctx, affectedUserIds, role.ProductCode) return nil }