usecase

package
v0.0.0-...-1f1dc5f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package usecase coordinates role and menu access workflows.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AllPermissions

func AllPermissions() []string

AllPermissions returns the current foundation permission set.

Types

type API

type API struct {
	ID          int64     `json:"id"`
	Method      string    `json:"method"`
	Path        string    `json:"path"`
	Description string    `json:"description"`
	Group       string    `json:"group"`
	Permission  string    `json:"permission"`
	Public      bool      `json:"public"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

API is the adapter-facing API route DTO.

type APIInput

type APIInput struct {
	Method      string
	Path        string
	Description string
	Group       string
	Permission  string
	Public      bool
}

APIInput carries mutable API metadata.

type APIListOutput

type APIListOutput struct {
	Items    []API
	Page     int
	PageSize int
	Total    int
}

APIListOutput is a paginated API result.

type APIRolesInput

type APIRolesInput struct {
	APIID   int64
	RoleIDs []int64
}

APIRolesInput carries the full role assignment for one API route.

type AdminRoleReader

type AdminRoleReader interface {
	AdminRoleState(context.Context, int64) (AdminRoleState, error)
	RoleAssigned(context.Context, int64) (bool, error)
}

AdminRoleReader reads the current administrator role assignment without exposing identity storage.

type AdminRoleState

type AdminRoleState struct {
	RoleIDs      []int64
	ActiveRoleID int64
}

AdminRoleState is the minimal identity snapshot needed for scoped role delegation.

type Button

type Button struct {
	ID          int64     `json:"id"`
	MenuID      int64     `json:"menu_id"`
	Name        string    `json:"name"`
	Description string    `json:"description"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

Button is the adapter-facing menu button DTO.

type CopyRoleInput

type CopyRoleInput struct {
	SourceID    int64
	ParentID    *int64
	Code        string
	Name        string
	DefaultPath *string
	Active      *bool
}

CopyRoleInput carries the new identity fields for a copied role.

type ListFilter

type ListFilter struct {
	Offset   int
	Limit    int
	Page     int
	PageSize int
}

ListFilter is the validated store-facing pagination window.

type ListInput

type ListInput struct {
	Page     int
	PageSize int
}

ListInput carries pagination for role lists.

type Menu struct {
	ID         int64     `json:"id"`
	ParentID   int64     `json:"parent_id"`
	Name       string    `json:"name"`
	Path       string    `json:"path"`
	Icon       string    `json:"icon"`
	Hidden     bool      `json:"hidden"`
	Component  string    `json:"component"`
	Meta       MenuMeta  `json:"meta"`
	Permission string    `json:"permission"`
	Sort       int       `json:"sort"`
	Active     bool      `json:"active"`
	Buttons    []Button  `json:"buttons"`
	CreatedAt  time.Time `json:"created_at"`
	UpdatedAt  time.Time `json:"updated_at"`
}

Menu is the adapter-facing menu DTO.

type MenuButtonInput struct {
	ID          int64
	Name        string
	Description string
}

MenuButtonInput carries one page-level operation key attached to a menu.

type MenuInput struct {
	ParentID   int64
	Name       string
	Path       string
	Icon       string
	Hidden     bool
	Component  string
	Meta       MenuMetaInput
	Permission string
	Sort       int
	Active     bool
	Buttons    []MenuButtonInput
}

MenuInput carries mutable menu fields.

type MenuMeta struct {
	ActiveName     string `json:"active_name"`
	KeepAlive      bool   `json:"keep_alive"`
	DefaultMenu    bool   `json:"default_menu"`
	CloseTab       bool   `json:"close_tab"`
	TransitionType string `json:"transition_type"`
}

MenuMeta is the adapter-facing router metadata DTO.

type MenuMetaInput struct {
	ActiveName     string
	KeepAlive      bool
	DefaultMenu    bool
	CloseTab       bool
	TransitionType string
}

MenuMetaInput carries router metadata for one menu.

type MenuRolesInput struct {
	MenuID  int64
	RoleIDs []int64
}

MenuRolesInput carries the full role assignment for one menu.

type PermissionDefinition

type PermissionDefinition struct {
	Token    string `json:"token"`
	Resource string `json:"resource"`
	Action   string `json:"action"`
	Name     string `json:"name"`
}

PermissionDefinition is the adapter-facing permission metadata DTO.

type Role

type Role struct {
	ID          int64     `json:"id"`
	ParentID    int64     `json:"parent_id"`
	Code        string    `json:"code"`
	Name        string    `json:"name"`
	Permissions []string  `json:"permissions"`
	MenuIDs     []int64   `json:"menu_ids"`
	APIIDs      []int64   `json:"api_ids"`
	ButtonIDs   []int64   `json:"button_ids"`
	DataRoleIDs []int64   `json:"data_role_ids"`
	DefaultPath string    `json:"default_path"`
	Active      bool      `json:"active"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

Role is the adapter-facing role DTO.

type RoleInput

type RoleInput struct {
	ParentID    int64
	Code        string
	Name        string
	Permissions []string
	MenuIDs     []int64
	APIIDs      []int64
	ButtonIDs   []int64
	DataRoleIDs []int64
	DefaultPath string
	Active      bool
}

RoleInput carries mutable role fields.

type RoleListOutput

type RoleListOutput struct {
	Items    []Role
	Page     int
	PageSize int
	Total    int
}

RoleListOutput is a paginated role result.

type Store

type Store interface {
	FindRoleByID(context.Context, int64) (domain.Role, error)
	FindRoleByCode(context.Context, string) (domain.Role, error)
	ListAllRoles(context.Context) ([]domain.Role, error)
	CreateRole(context.Context, domain.Role) (domain.Role, error)
	UpdateRole(context.Context, domain.Role) (domain.Role, error)
	DeleteRole(context.Context, int64) error
	FindAPIByID(context.Context, int64) (domain.API, error)
	FindAPIByRoute(context.Context, string, string) (domain.API, error)
	ListAPIs(context.Context) ([]domain.API, error)
	CreateAPI(context.Context, domain.API) (domain.API, error)
	UpdateAPI(context.Context, domain.API) (domain.API, error)
	DeleteAPI(context.Context, int64) error
	FindMenuByID(context.Context, int64) (domain.Menu, error)
	ListMenus(context.Context) ([]domain.Menu, error)
	CreateMenu(context.Context, domain.Menu) (domain.Menu, error)
	UpdateMenu(context.Context, domain.Menu) (domain.Menu, error)
	DeleteMenu(context.Context, int64) error
}

Store persists roles and menus for the access usecase.

type UpdateAPIInput

type UpdateAPIInput struct {
	ID          int64
	Method      string
	Path        string
	Description string
	Group       string
	Permission  string
	Public      bool
}

UpdateAPIInput carries mutable API updates.

type UpdateMenuInput

type UpdateMenuInput struct {
	ID         int64
	ParentID   int64
	Name       string
	Path       string
	Icon       string
	Hidden     bool
	Component  string
	Meta       MenuMetaInput
	Permission string
	Sort       int
	Active     bool
	Buttons    []MenuButtonInput
}

UpdateMenuInput carries mutable menu updates.

type UpdateRoleInput

type UpdateRoleInput struct {
	ID          int64
	ParentID    *int64
	Name        *string
	Permissions []string
	MenuIDs     []int64
	APIIDs      []int64
	ButtonIDs   []int64
	DataRoleIDs []int64
	DefaultPath *string
	Active      *bool
}

UpdateRoleInput carries partial role updates.

type Usecase

type Usecase struct {
	// contains filtered or unexported fields
}

Usecase coordinates role and menu rules.

func New

func New(store Store, admins AdminRoleReader) *Usecase

New creates an access usecase.

func (*Usecase) APIGroups

func (u *Usecase) APIGroups(ctx context.Context) ([]string, error)

APIGroups returns sorted API group names for filters and editors.

func (*Usecase) APIRoleIDs

func (u *Usecase) APIRoleIDs(ctx context.Context, apiID int64) ([]int64, error)

APIRoleIDs returns visible role ids currently granted one API route.

func (*Usecase) AssignableRoleIDs

func (u *Usecase) AssignableRoleIDs(ctx context.Context) ([]int64, error)

AssignableRoleIDs returns role ids the active role may assign to administrators.

func (*Usecase) CopyRole

func (u *Usecase) CopyRole(ctx context.Context, input CopyRoleInput) (Role, error)

CopyRole creates a new role by copying grants from an existing role inside the active delegation scope.

func (*Usecase) CreateAPI

func (u *Usecase) CreateAPI(ctx context.Context, input APIInput) (API, error)

CreateAPI validates and stores a managed API route.

func (*Usecase) CreateMenu

func (u *Usecase) CreateMenu(ctx context.Context, input MenuInput) (Menu, error)

CreateMenu validates and stores a new menu.

func (*Usecase) CreateRole

func (u *Usecase) CreateRole(ctx context.Context, input RoleInput) (Role, error)

CreateRole validates and stores a delegated role.

func (*Usecase) DeleteAPI

func (u *Usecase) DeleteAPI(ctx context.Context, id int64) error

DeleteAPI removes an API route only when no role grant still references it.

func (*Usecase) DeleteAPIs

func (u *Usecase) DeleteAPIs(ctx context.Context, ids []int64) error

DeleteAPIs removes API routes only when no role grant still references them.

func (*Usecase) DeleteMenu

func (u *Usecase) DeleteMenu(ctx context.Context, id int64) error

DeleteMenu removes a menu only when no child menu or role grant still references it.

func (*Usecase) DeleteRole

func (u *Usecase) DeleteRole(ctx context.Context, id int64) error

DeleteRole removes a role only when the active role owns it and no admin or child role still depends on it.

func (*Usecase) EnsureAssignableRoles

func (u *Usecase) EnsureAssignableRoles(ctx context.Context, roleIDs []int64) error

EnsureAssignableRoles rejects role assignments outside the active role delegation scope.

func (*Usecase) FindAPI

func (u *Usecase) FindAPI(ctx context.Context, id int64) (API, error)

FindAPI returns one managed API route by id.

func (*Usecase) FindMenu

func (u *Usecase) FindMenu(ctx context.Context, id int64) (Menu, error)

FindMenu returns one menu by id.

func (*Usecase) ListAPIs

func (u *Usecase) ListAPIs(ctx context.Context, input ListInput) (APIListOutput, error)

ListAPIs returns paginated API route metadata.

func (*Usecase) ListMenus

func (u *Usecase) ListMenus(ctx context.Context) ([]Menu, error)

ListMenus returns all menus in display order.

func (*Usecase) ListPermissions

func (u *Usecase) ListPermissions(ctx context.Context) ([]PermissionDefinition, error)

ListPermissions returns grant metadata for role editing UIs.

func (*Usecase) ListRoles

func (u *Usecase) ListRoles(ctx context.Context, input ListInput) (RoleListOutput, error)

ListRoles returns paginated roles visible to the active role.

func (*Usecase) MenuRoleIDs

func (u *Usecase) MenuRoleIDs(ctx context.Context, menuID int64) ([]int64, error)

MenuRoleIDs returns visible role ids currently granted one menu.

func (*Usecase) SetAPIRoles

func (u *Usecase) SetAPIRoles(ctx context.Context, input APIRolesInput) ([]int64, error)

SetAPIRoles replaces role grants for one API route within the active role scope.

func (*Usecase) SetMenuRoles

func (u *Usecase) SetMenuRoles(ctx context.Context, input MenuRolesInput) ([]int64, error)

SetMenuRoles replaces role grants for one menu within the active role scope.

func (*Usecase) UpdateAPI

func (u *Usecase) UpdateAPI(ctx context.Context, input UpdateAPIInput) (API, error)

UpdateAPI replaces mutable API route metadata.

func (*Usecase) UpdateMenu

func (u *Usecase) UpdateMenu(ctx context.Context, input UpdateMenuInput) (Menu, error)

UpdateMenu replaces mutable menu fields.

func (*Usecase) UpdateRole

func (u *Usecase) UpdateRole(ctx context.Context, input UpdateRoleInput) (Role, error)

UpdateRole applies mutable role changes within the active role delegation scope.

func (*Usecase) VisibleRoleIDs

func (u *Usecase) VisibleRoleIDs(ctx context.Context) ([]int64, error)

VisibleRoleIDs returns role ids whose administrators are visible to the active role.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL