package useCases import ( "RenewCMS/internal/domain/role" "RenewCMS/internal/domain/user" ) type Access struct { Role role.Role Permissions []role.Grant RoleAssignedBy *RoleAssigner } type GetMyAccessUseCase struct { roles role.Repository users user.Repository } func NewGetMyAccessUseCase(roles role.Repository, users user.Repository) *GetMyAccessUseCase { return &GetMyAccessUseCase{roles: roles, users: users} } func resolveRole(roles role.Repository, account user.User) (role.Role, error) { if account.RoleID == 0 { return role.Role{}, role.ErrRoleNotFound } return roles.Get(account.RoleID) } func (u *GetMyAccessUseCase) Get(account user.User) (Access, error) { resolved, err := resolveRole(u.roles, account) if err != nil { return Access{}, err } access := Access{Role: resolved, Permissions: resolved.EffectiveGrants()} access.RoleAssignedBy, err = resolveRoleAssigner(u.users, account.RoleAssignedByID) if err != nil { return Access{}, err } return access, nil }