Skip to content
Snippets Groups Projects
Select Git revision
  • 391bbcc36ab3a695789811790f3bbacd79c69369
  • master default protected
  • feature/PRXS-3156-SaveRevision
  • PRXS-3421-RecursiveReferences
  • feature/PRXS-NotifyAttachment
  • feature/PRXS-3170-TemplateFuncsFix
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-1869-SuperUser
  • feature/PRXS-3106-NoCache
  • release/0.33
  • feature/2781-SpacesLoggingMiddleware
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • feature/3109-SerializeFeature
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • v0.34.0
  • v0.33.2
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
41 results

principal.go

Blame
  • principal.go 1.88 KiB
    package auth
    
    import (
    	"context"
    
    	"git.perx.ru/perxis/perxis-go/pkg/environments"
    	"git.perx.ru/perxis/perxis-go/pkg/members"
    	"git.perx.ru/perxis/perxis-go/pkg/permission"
    	"git.perx.ru/perxis/perxis-go/pkg/roles"
    )
    
    type Principal interface {
    	GetID(ctx context.Context) string
    	IsValid(ctx context.Context) bool
    	IsSystem(ctx context.Context) bool
    	HasAccess(ctx context.Context, spID, orgID string) error
    
    	IsManagementAllowed(ctx context.Context, spaceID string) error
    }
    
    type SpaceAccessor interface {
    	Principal
    	Space(spaceID string) SpaceAccessor
    
    	// HasSpaceAccess проверяет, есть ли у принципала доступ на чтение пространства
    	// (просмотр информации о пространстве, окружений, т.д. - доступ к записям коллекций
    	// определяется отдельным набором правил, см. SpaceAccessor.Rules())
    	HasSpaceAccess(ctx context.Context, spaceID string) bool
    	HasEnvironmentAccess(ctx context.Context, spaceID, env string) bool
    
    	// Member возвращает роль принципала в организации
    	Member(ctx context.Context) members.Role
    
    	Role(ctx context.Context, spaceID string) *roles.Role
    
    	// Rules возвращает набор правил, по которым принципал может получить
    	// доступ к записям коллекций пространства.
    	Rules(ctx context.Context, spaceID, envID string) permission.Ruleset
    }
    
    type OrganizationAccessor interface {
    	Principal
    	Organization(orgID string) OrganizationAccessor
    	Member(ctx context.Context) members.Role
    }
    
    func hasEnvironmentAccess(ctx context.Context, envsrv environments.Environments, role *roles.Role, envID string) bool {
    	return role != nil && role.CanAccessEnvironment(ctx, &environments.Environment{SpaceID: role.SpaceID, ID: envID}, envsrv)
    }