service

package
v0.0.12 Latest Latest
Warning

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

Go to latest
Published: Jan 29, 2024 License: MIT Imports: 8 Imported by: 8

Documentation

Index

Constants

View Source
const (
	UserServiceContextKey libdomain.ContextKey = "user_service"

	SystemAdminLoginID = "__system_admin"
	SystemOwnerLoginID = "__system_owner"

	SystemOwnerGroupKey = "__system_owner"
	OwnerGroupKey       = "__owner"

	SystemOwnerGroupName = "System Owner"
	OwnerGroupName       = "Owner"
)

Variables

View Source
var ErrAppUserAlreadyExists = errors.New("AppUser already exists")
View Source
var ErrAppUserNotFound = errors.New("AppUser not found")
View Source
var ErrOrganizationAlreadyExists = errors.New("organization already exists")
View Source
var ErrOrganizationNotFound = errors.New("organization not found")
View Source
var ErrSystemOwnerNotFound = errors.New("SystemOwner not found")
View Source
var RBACAllowEffect = domain.NewRBACEffect("allow")
View Source
var RBACDenyEffect = domain.NewRBACEffect("deny")
View Source
var RBACSetAction = domain.NewRBACAction("Set")
View Source
var RBACUnsetAction = domain.NewRBACAction("Unset")

Functions

func NewRBACAllUserRolesObject

func NewRBACAllUserRolesObject(organizationID *domain.OrganizationID) domain.RBACObject

func NewRBACAppUser

func NewRBACAppUser(organizationID *domain.OrganizationID, appUserID *domain.AppUserID) domain.RBACUser

func NewRBACOrganization

func NewRBACOrganization(organizationID *domain.OrganizationID) domain.RBACDomain

func NewRBACUserRole

func NewRBACUserRole(organizationID *domain.OrganizationID, userGroupID *domain.UserGroupID) domain.RBACRole
func NewRBACUserRole(userRoleID domain.UserGroupID) domain.RBACRole {
	return domain.NewRBACRole(fmt.Sprintf("role_%d", userRoleID.Int()))
}

func NewRBACUserRoleObject

func NewRBACUserRoleObject(organizationID *domain.OrganizationID, userRoleID *domain.UserGroupID) domain.RBACObject

Types

type AppUser

type AppUser struct {
	*domain.AppUserModel
}

func NewAppUser

func NewAppUser(ctx context.Context, rf RepositoryFactory, appUserModel *domain.AppUserModel) (*AppUser, error)

func (*AppUser) AppUserID added in v0.0.3

func (m *AppUser) AppUserID() *domain.AppUserID

func (*AppUser) LoginID added in v0.0.3

func (m *AppUser) LoginID() string

func (*AppUser) OrganizationID added in v0.0.3

func (m *AppUser) OrganizationID() *domain.OrganizationID

func (*AppUser) Username added in v0.0.3

func (m *AppUser) Username() string

type AppUserAddParameter

type AppUserAddParameter struct {
	LoginIDInternal           string
	UsernameInternal          string
	PasswordInternal          string
	ProviderInternal          string
	ProviderLoginIDInternal   string
	ProviderAuthTokenInternal string
	// contains filtered or unexported fields
}

func NewAppUserAddParameter

func NewAppUserAddParameter(loginID, username, password, provider, providerLoginID, providerAuthToken, providerRefreshToken string) (*AppUserAddParameter, error)

func (*AppUserAddParameter) LoginID added in v0.0.3

func (p *AppUserAddParameter) LoginID() string

func (*AppUserAddParameter) Password added in v0.0.3

func (p *AppUserAddParameter) Password() string

func (*AppUserAddParameter) Provider added in v0.0.5

func (p *AppUserAddParameter) Provider() string

func (*AppUserAddParameter) ProviderAuthToken added in v0.0.5

func (p *AppUserAddParameter) ProviderAuthToken() string

func (*AppUserAddParameter) ProviderLoginID added in v0.0.5

func (p *AppUserAddParameter) ProviderLoginID() string

func (*AppUserAddParameter) ProviderRefreshToken added in v0.0.5

func (p *AppUserAddParameter) ProviderRefreshToken() string

func (*AppUserAddParameter) Username added in v0.0.3

func (p *AppUserAddParameter) Username() string

type AppUserAddParameterInterface added in v0.0.3

type AppUserAddParameterInterface interface {
	LoginID() string
	Username() string
	Password() string
	Provider() string
	ProviderLoginID() string
	ProviderAuthToken() string
	ProviderRefreshToken() string
}

type AppUserInterface added in v0.0.3

type AppUserInterface interface {
	AppUserID() *domain.AppUserID
	OrganizationID() *domain.OrganizationID
	LoginID() string
	Username() string
}

type AppUserRepository

type AppUserRepository interface {
	FindSystemOwnerByOrganizationID(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID) (*SystemOwner, error)

	FindSystemOwnerByOrganizationName(ctx context.Context, operator SystemAdminInterface, organizationName string, options ...Option) (*SystemOwner, error)

	FindAppUserByID(ctx context.Context, operator AppUserInterface, id *domain.AppUserID, options ...Option) (*AppUser, error)

	FindAppUserByLoginID(ctx context.Context, operator AppUserInterface, loginID string) (*AppUser, error)

	FindOwnerByLoginID(ctx context.Context, operator SystemOwnerInterface, loginID string) (*Owner, error)

	AddAppUser(ctx context.Context, operator OwnerModelInterface, param AppUserAddParameterInterface) (*domain.AppUserID, error)

	AddSystemOwner(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID) (*domain.AppUserID, error)

	VerifyPassword(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID, loginID, password string) (bool, error)
}

type AuthorizationManager

type AuthorizationManager interface {
	Init(ctx context.Context) error

	AddUserToGroup(ctx context.Context, operator AppUserInterface, appUserID *domain.AppUserID, userGroupID *domain.UserGroupID) error

	AddUserToGroupBySystemAdmin(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID, appUserID *domain.AppUserID, userGroupID *domain.UserGroupID) error

	AddPolicyToUser(ctx context.Context, operator AppUserInterface, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	AddPolicyToUserBySystemAdmin(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	AddPolicyToGroup(ctx context.Context, operator AppUserInterface, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	AddPolicyToGroupBySystemAdmin(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	Authorize(ctx context.Context, operator AppUserInterface, rbacAction domain.RBACAction, rbacObject domain.RBACObject) (bool, error)
}

type Option

type Option string
var IncludeGroups Option = "IncludeGroups"

type Organization

type Organization struct {
	*domain.OrganizationModel
}

func NewOrganization

func NewOrganization(organizationModel *domain.OrganizationModel) (*Organization, error)

func (*Organization) Name added in v0.0.3

func (m *Organization) Name() string

func (*Organization) OrganizationID added in v0.0.3

func (m *Organization) OrganizationID() *domain.OrganizationID

type OrganizationAddParameter

type OrganizationAddParameter struct {
	Name_       string `validate:"required"`
	FirstOwner_ AppUserAddParameterInterface
}

func NewOrganizationAddParameter

func NewOrganizationAddParameter(name string, firstOwner AppUserAddParameterInterface) (*OrganizationAddParameter, error)

func (*OrganizationAddParameter) FirstOwner added in v0.0.3

func (*OrganizationAddParameter) Name added in v0.0.3

func (p *OrganizationAddParameter) Name() string

type OrganizationAddParameterInterface added in v0.0.3

type OrganizationAddParameterInterface interface {
	Name() string
	FirstOwner() AppUserAddParameterInterface
}

type OrganizationRepository

type OrganizationRepository interface {
	GetOrganization(ctx context.Context, operator AppUserInterface) (*Organization, error)

	FindOrganizationByName(ctx context.Context, operator SystemAdminInterface, name string) (*Organization, error)

	FindOrganizationByID(ctx context.Context, operator SystemAdminInterface, id *domain.OrganizationID) (*Organization, error)

	AddOrganization(ctx context.Context, operator SystemAdminInterface, param OrganizationAddParameterInterface) (*domain.OrganizationID, error)
}

type Owner

type Owner struct {
	*domain.OwnerModel
	// contains filtered or unexported fields
}

func NewOwner

func NewOwner(rf RepositoryFactory, ownerModel *domain.OwnerModel) *Owner

func (*Owner) AddAppUser added in v0.0.3

func (m *Owner) AddAppUser(ctx context.Context, param AppUserAddParameterInterface) (*domain.AppUserID, error)

func (*Owner) AppUserID added in v0.0.3

func (m *Owner) AppUserID() *domain.AppUserID

func (*Owner) IsOwner added in v0.0.3

func (m *Owner) IsOwner() bool

func (*Owner) LoginID added in v0.0.3

func (m *Owner) LoginID() string

func (*Owner) OrganizationID added in v0.0.3

func (m *Owner) OrganizationID() *domain.OrganizationID

func (*Owner) Username added in v0.0.3

func (m *Owner) Username() string

type OwnerModelInterface added in v0.0.3

type OwnerModelInterface interface {
	AppUserInterface
	IsOwner() bool
}

type PairOfUserAndGroupRepository

type PairOfUserAndGroupRepository interface {
	AddPairOfUserAndGroupBySystemAdmin(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID, appUserID *domain.AppUserID, userGroupID *domain.UserGroupID) error

	AddPairOfUserAndGroup(ctx context.Context, operator AppUserInterface, appUserID *domain.AppUserID, userGroupID *domain.UserGroupID) error

	RemovePairOfUserAndGroup(ctx context.Context, operator AppUserInterface, appUserID *domain.AppUserID, userGroupID *domain.UserGroupID) error

	FindUserGroupsByUserID(ctx context.Context, operator AppUserInterface, appUserID *domain.AppUserID) ([]*domain.UserGroupModel, error)
}

type RBACRepository

type RBACRepository interface {
	Init() error

	AddPolicy(ctx context.Context, domain domain.RBACDomain, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	AddSubjectGroupingPolicy(ctx context.Context, domain domain.RBACDomain, subject domain.RBACUser, object domain.RBACRole) error
	AddObjectGroupingPolicy(ctx context.Context, domain domain.RBACDomain, child domain.RBACObject, parent domain.RBACObject) error

	RemovePolicy(ctx context.Context, domain domain.RBACDomain, subject domain.RBACSubject, action domain.RBACAction, object domain.RBACObject, effect domain.RBACEffect) error

	RemoveSubjectGroupingPolicy(ctx context.Context, domain domain.RBACDomain, subject domain.RBACUser, object domain.RBACRole) error
	RemoveObjectGroupingPolicy(ctx context.Context, domain domain.RBACDomain, child domain.RBACObject, parent domain.RBACObject) error

	NewEnforcerWithGroupsAndUsers(ctx context.Context, roles []domain.RBACRole, users []domain.RBACUser) (*casbin.Enforcer, error)
}

type RepositoryFactory

type RepositoryFactory interface {
	NewOrganizationRepository(ctx context.Context) OrganizationRepository
	NewAppUserRepository(ctx context.Context) AppUserRepository
	NewUserGroupRepository(ctx context.Context) UserGroupRepository

	NewAuthorizationManager(ctx context.Context) AuthorizationManager
}

type SystemAdmin

type SystemAdmin struct {
	*domain.SystemAdminModel
	// contains filtered or unexported fields
}

func NewSystemAdmin

func NewSystemAdmin(ctx context.Context, rf RepositoryFactory) (*SystemAdmin, error)

func (*SystemAdmin) AddOrganization

func (*SystemAdmin) AppUserID added in v0.0.3

func (m *SystemAdmin) AppUserID() *domain.AppUserID

func (*SystemAdmin) FindOrganizationByName

func (m *SystemAdmin) FindOrganizationByName(ctx context.Context, name string) (*Organization, error)

func (*SystemAdmin) FindSystemOwnerByOrganizationID

func (m *SystemAdmin) FindSystemOwnerByOrganizationID(ctx context.Context, organizationID *domain.OrganizationID) (*SystemOwner, error)

func (*SystemAdmin) FindSystemOwnerByOrganizationName

func (m *SystemAdmin) FindSystemOwnerByOrganizationName(ctx context.Context, organizationName string) (*SystemOwner, error)

func (*SystemAdmin) IsSystemAdmin added in v0.0.3

func (m *SystemAdmin) IsSystemAdmin() bool

type SystemAdminInterface added in v0.0.3

type SystemAdminInterface interface {
	AppUserID() *domain.AppUserID
	IsSystemAdmin() bool
}

type SystemOwner

type SystemOwner struct {
	*domain.SystemOwnerModel
	// contains filtered or unexported fields
}

func NewSystemOwner

func NewSystemOwner(ctx context.Context, rf RepositoryFactory, systemOwnerModel *domain.SystemOwnerModel) (*SystemOwner, error)

func (*SystemOwner) AddAppUser added in v0.0.5

func (*SystemOwner) AddFirstOwner

func (*SystemOwner) AppUserID added in v0.0.3

func (m *SystemOwner) AppUserID() *domain.AppUserID

func (*SystemOwner) FindAppUserByID

func (m *SystemOwner) FindAppUserByID(ctx context.Context, id *domain.AppUserID) (*AppUser, error)

func (*SystemOwner) FindAppUserByLoginID

func (m *SystemOwner) FindAppUserByLoginID(ctx context.Context, loginID string) (*AppUser, error)

func (*SystemOwner) GetOrganization

func (m *SystemOwner) GetOrganization(ctx context.Context) (*Organization, error)

func (*SystemOwner) IsOwner added in v0.0.3

func (m *SystemOwner) IsOwner() bool

func (*SystemOwner) IsSystemOwner added in v0.0.3

func (m *SystemOwner) IsSystemOwner() bool

func (*SystemOwner) LoginID added in v0.0.3

func (m *SystemOwner) LoginID() string

func (*SystemOwner) OrganizationID added in v0.0.3

func (m *SystemOwner) OrganizationID() *domain.OrganizationID

func (*SystemOwner) Username added in v0.0.3

func (m *SystemOwner) Username() string

type SystemOwnerInterface added in v0.0.3

type SystemOwnerInterface interface {
	OwnerModelInterface
	IsSystemOwner() bool
}

type TransactionManager

type TransactionManager interface {
	Do(ctx context.Context, fn func(rf RepositoryFactory) error) error
}

type UserGroup

type UserGroup struct {
	*domain.UserGroupModel
}

func NewUserGroup

func NewUserGroup(userGroupModel *domain.UserGroupModel) (*UserGroup, error)

NewUserGroup returns a new UserGroup

func (*UserGroup) Description added in v0.0.3

func (m *UserGroup) Description() string

func (*UserGroup) Key added in v0.0.3

func (m *UserGroup) Key() string

func (*UserGroup) Name added in v0.0.3

func (m *UserGroup) Name() string

func (*UserGroup) OrganizationID added in v0.0.3

func (m *UserGroup) OrganizationID() *domain.OrganizationID

func (*UserGroup) UserGroupID added in v0.0.3

func (m *UserGroup) UserGroupID() *domain.UserGroupID

type UserGroupAddParameter

type UserGroupAddParameter struct {
	KeyInternal         string
	NameInternal        string
	DescriptionInternal string
}

func NewUserGroupAddParameter

func NewUserGroupAddParameter(key, name, description string) (*UserGroupAddParameter, error)

func (*UserGroupAddParameter) Description added in v0.0.3

func (p *UserGroupAddParameter) Description() string

func (*UserGroupAddParameter) Key added in v0.0.3

func (p *UserGroupAddParameter) Key() string

func (*UserGroupAddParameter) Name added in v0.0.3

func (p *UserGroupAddParameter) Name() string

type UserGroupAddParameterInterface added in v0.0.3

type UserGroupAddParameterInterface interface {
	Key() string
	Name() string
	Description() string
}

type UserGroupRepository

type UserGroupRepository interface {
	FindAllUserGroups(ctx context.Context, operator AppUserInterface) ([]*domain.UserGroupModel, error)

	FindSystemOwnerGroup(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID) (*UserGroup, error)

	FindUserGroupByKey(ctx context.Context, operator AppUserInterface, key string) (*UserGroup, error)
	FindUserGroupByID(ctx context.Context, operator AppUserInterface, userGroupID *domain.UserGroupID) (*UserGroup, error)
	AddOwnerGroup(ctx context.Context, operator SystemOwnerInterface, organizationID *domain.OrganizationID) (*domain.UserGroupID, error)

	AddSystemOwnerGroup(ctx context.Context, operator SystemAdminInterface, organizationID *domain.OrganizationID) (*domain.UserGroupID, error)

	AddUserGroup(ctx context.Context, operator OwnerModelInterface, parameter UserGroupAddParameterInterface) (*domain.UserGroupID, error)
}

Jump to

Keyboard shortcuts

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