51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
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
|
|
}
|