Files
RenewCMS/internal/infrastructure/useCases/GetMyAccess.go
T

42 lines
1016 B
Go

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
}