package role import ( "context" "perms-system-server/internal/middleware" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type RoleDetailLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewRoleDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RoleDetailLogic { return &RoleDetailLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *RoleDetailLogic) RoleDetail(req *types.RoleDetailReq) (resp *types.RoleItem, err error) { role, err := l.svcCtx.SysRoleModel.FindOne(l.ctx, req.Id) if err != nil { return nil, response.ErrNotFound("角色不存在") } caller := middleware.GetUserDetails(l.ctx) if caller == nil { return nil, response.ErrUnauthorized("未登录") } if !caller.IsSuperAdmin && caller.ProductCode != role.ProductCode { return nil, response.ErrForbidden("无权访问该产品的数据") } permIds, err := l.svcCtx.SysRolePermModel.FindPermIdsByRoleId(l.ctx, role.Id) if err != nil { return nil, err } return &types.RoleItem{ Id: role.Id, ProductCode: role.ProductCode, Name: role.Name, Remark: role.Remark, Status: role.Status, PermsLevel: role.PermsLevel, PermIds: permIds, CreateTime: role.CreateTime, }, nil }