40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package identity
|
|
|
|
import "git.cin.su/m/Assistant/platform/ids"
|
|
|
|
type ActorID ids.ID
|
|
type PrincipalID ids.ID
|
|
type IdentityID ids.ID
|
|
|
|
type DataRealmKind string
|
|
|
|
const (
|
|
DataRealmPersonal DataRealmKind = "PERSONAL"
|
|
DataRealmShared DataRealmKind = "SHARED"
|
|
DataRealmPublic DataRealmKind = "PUBLIC"
|
|
)
|
|
|
|
// PrincipalDataRealm is an identity-owned access boundary. It does not make
|
|
// a speaker or World person referent an authenticated principal.
|
|
type PrincipalDataRealm struct {
|
|
ID string
|
|
OwnerPrincipalID PrincipalID
|
|
Kind DataRealmKind
|
|
MemberPrincipalIDs []PrincipalID
|
|
Shared bool
|
|
Revision int64
|
|
RecordedAtUnixMillis int64
|
|
}
|
|
|
|
func (r PrincipalDataRealm) Valid() bool {
|
|
return r.ID != "" && r.OwnerPrincipalID != "" && (r.Kind == DataRealmPersonal || r.Kind == DataRealmShared || r.Kind == DataRealmPublic) && r.Revision > 0 && r.RecordedAtUnixMillis > 0 && (r.Kind != DataRealmShared || r.Shared)
|
|
}
|
|
|
|
// PrincipalBinding keeps the operational actor separate from the interest on
|
|
// whose behalf it acts. A Creator is not exempt from this distinction.
|
|
type PrincipalBinding struct {
|
|
ActorID ActorID
|
|
PrincipalID PrincipalID
|
|
Active bool
|
|
}
|