| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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
- }
|