package useCases import ( "RenewCMS/internal/domain/role" "RenewCMS/internal/domain/user" ) type Access struct { Role role.Role Permissions []role.Grant } type GetMyAccessUseCase struct { roles role.Repository } func NewGetMyAccessUseCase(roles role.Repository) *GetMyAccessUseCase { return &GetMyAccessUseCase{roles: roles} } var legacyBuiltInNames = map[user.Role]string{ user.RoleOwner: role.OwnerName, user.RoleAdmin: role.AdminName, } func resolveRole(roles role.Repository, account user.User) (role.Role, error) { if account.RoleID != 0 { return roles.Get(account.RoleID) } name, known := legacyBuiltInNames[account.Role] if !known { return role.Role{}, role.ErrRoleNotFound } found, err := roles.GetByName(name) if err != nil { return role.Role{}, err } if !found.BuiltIn { return role.Role{}, role.ErrRoleNotFound } return found, nil } func (u *GetMyAccessUseCase) Get(account user.User) (Access, error) { resolved, err := resolveRole(u.roles, account) if err != nil { return Access{}, err } return Access{Role: resolved, Permissions: resolved.EffectiveGrants()}, nil }