Skip to main content

Access Control Ontology

Administrative Metadata
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 06 October 2026
Audio Overview
FLOW ALGEBRA
Access Control Ontology
Kireth Semantic Research Archive

PAGE:
https://kirethresearch.org/booksai-core/ontologies/metadata-ontologies/administrative-metadata/access-control-ontology.html

AUTHORS:
Mark Anthony Higgins — Sky (Recursive AI)

FLOW "AccessControlOntology" v4.0

DOMAIN := MetadataOntologies
SUBDOMAIN := AdministrativeMetadata
ONTOLOGY := AccessControlOntology

ENTITY AccessControl {
    definition:
        "Administrative metadata and policy structures that determine whether
         an authenticated or otherwise identified subject may perform a
         specified action on a resource under defined roles, permissions,
         restrictions, conditions, security classifications and contextual
         rules.";
    objectives: [
        Authorisation,
        ResourceProtection,
        PermissionManagement,
        PolicyEnforcement,
        LeastPrivilege,
        Auditability,
        MachineInterpretability
    ];
}

AccessEntity := {
    AccessControl,
    Subject,
    Resource,
    Action,
    Permission,
    Denial,
    AccessDecision,
    AccessRequest
};

IdentityEntity := {
    User,
    Agent,
    Role,
    Group,
    ServiceAccount,
    Identity,
    Credential,
    AuthenticationContext
};

PolicyEntity := {
    AccessPolicy,
    PolicyRule,
    Condition,
    Restriction,
    SecurityClassification,
    Clearance,
    Scope,
    Priority
};

AuditEntity := {
    AuditRecord,
    DecisionReason,
    Timestamp,
    Provenance,
    Version,
    Confidence
};

AccessPolicy GOVERNS AccessTo Resource;
Subject REQUESTS Action ON Resource;
PolicyRule EVALUATES AccessRequest;
Permission ALLOWS Action;
Denial FORBIDS Action;
Role MAY_GRANT Permission;
Group MAY_ASSIGN Role;
AccessDecision RESULTS_FROM PolicyEvaluation;
AuditRecord RECORDS AccessDecision;

AccessControlFlow :=
    AccessRequest
    -> IdentifySubject
    -> AuthenticateOrResolveIdentity
    -> IdentifyResource
    -> IdentifyRequestedAction
    -> RetrieveApplicablePolicies
    -> ResolveRolesGroupsAndPermissions
    -> EvaluateConditionsRestrictionsAndClassification
    -> ResolvePolicyConflicts
    -> ProduceAccessDecision
    -> EnforceDecision
    -> RecordAuditAndProvenance
    -> MaintainPolicyState;

AccessRequest :=
    Subject
    + Resource
    + Action
    + Context;

Subject :=
    AgentRequestingAccessOrOperation;

Subject MAY_BE {
    User,
    Person,
    Organisation,
    ServiceAccount,
    SoftwareAgent,
    AIService
};

Resource :=
    ProtectedObjectOrCapability;

Resource MAY_BE {
    Document,
    Dataset,
    File,
    MetadataRecord,
    API,
    Service,
    System,
    Model,
    ResourceFragment
};

Action :=
    OperationRequestedOnResource;

Action MAY_BE {
    Read,
    View,
    Search,
    Download,
    Create,
    Update,
    Delete,
    Execute,
    Share,
    Publish,
    Administer
};

Identity :=
    CanonicalRepresentationOfSubject;

Credential :=
    EvidenceUsedToSupportAuthentication;

Authentication :=
    ProcessOfEstablishingOrVerifyingSubjectIdentity;

AuthenticationContext MAY_INCLUDE {
    AuthenticationMethod,
    AuthenticationTime,
    AssuranceLevel,
    DeviceContext
};

Authentication != AuthorisationByDefinition;

AuthenticatedSubject MAY_STILL_BE DeniedRequestedAction;

Authorisation :=
    ProcessOfDeterminingWhetherSubjectMayPerformActionOnResource;

AccessPolicy :=
    RuleSetGoverningAuthorisationDecision;

PolicyRule :=
    ConditionalStatementContributingToAccessDecision;

PolicyRule MAY_HAVE {
    SubjectScope,
    ResourceScope,
    ActionScope,
    Effect,
    Condition,
    Priority
};

PolicyEffect MAY_BE {
    Permit,
    Deny
};

Permission :=
    AuthorisationAllowingSpecifiedActionWithinDefinedScope;

Denial :=
    DecisionOrRuleForbiddingSpecifiedAction;

Restriction :=
    ConstraintLimitingAccessOrPermittedAction;

Condition :=
    ContextualRequirementThatMustBeSatisfiedForRuleToApply;

Condition MAY_INCLUDE {
    TimeWindow,
    LocationContext,
    DeviceTrust,
    NetworkContext,
    AuthenticationStrength,
    ResourceStatus
};

Role :=
    NamedCollectionOfPermissionsOrResponsibilities;

RoleBasedAccessControl :=
    Subject
    -> HAS_ROLE
    -> Role
    -> HAS_PERMISSION
    -> ActionOnResource;

RBAC MAY_INCLUDE {
    RoleAssignment,
    PermissionAssignment,
    RoleHierarchy
};

RoleHierarchy :=
    RelationshipWhereRoleMayInheritPermissionsFromAnotherRoleAccordingToPolicy;

PermissionInheritance SHOULD_BE ExplicitlyDefined;

Group :=
    CollectionOfSubjectsUsedForAdministrativeAssignment;

Group MAY_HAVE RolesOrPermissionsAccordingToPolicy;

AttributeBasedAccessControl :=
    DecisionBasedOnAttributesOfSubjectResourceActionAndEnvironment;

ABAC MAY_USE {
    SubjectAttributes,
    ResourceAttributes,
    ActionAttributes,
    EnvironmentAttributes
};

DiscretionaryAccessControl :=
    AccessModelWhereResourceOwnerOrAuthorisedControllerMayGrantPermissions;

MandatoryAccessControl :=
    AccessModelUsingSecurityLabelsClearancesAndMandatoryRules;

SecurityClassification :=
    ProtectionLevelAssignedToResource;

SecurityClassification MAY_BE {
    Public,
    Internal,
    Confidential,
    Restricted,
    CustomLevel
};

Clearance :=
    AuthorisedSecurityLevelAssociatedWithSubject;

IF MandatoryPolicyRequiresClearance
AND SubjectClearanceInsufficient
THEN AccessDecision := Deny;

LeastPrivilege :=
    PrincipleThatSubjectShouldReceiveOnlyPermissionsNecessaryForRequiredTasks;

DefaultDeny :=
    PolicyPrincipleWhereAccessIsDeniedUnlessExplicitlyPermitted;

IF NoApplicablePermitRule
AND PolicyUsesDefaultDeny
THEN AccessDecision := Deny;

DefaultAllow :=
    PolicyPrincipleWhereAccessIsAllowedUnlessExplicitlyDenied;

DefaultAllow SHOULD_BE UsedOnlyWhereGovernanceAndRiskPermit;

ExplicitDeny :=
    DenyRuleThatMayOverridePermitAccordingToPolicyCombiningAlgorithm;

PolicyCombiningAlgorithm :=
    RuleForResolvingMultipleApplicablePolicyEffects;

CombiningAlgorithm MAY_BE {
    DenyOverrides,
    PermitOverrides,
    FirstApplicable,
    PriorityBased,
    OnlyOneApplicable
};

DenyOverrides :=
    IF AnyApplicableRuleDenies
    THEN FinalDecision := Deny
    UNLESS higher_order_policy_explicitly_defines_otherwise;

PermitOverrides :=
    IF AnyApplicableRulePermits
    THEN FinalDecision MAY_BE Permit
    ACCORDING_TO defined_policy;

PriorityBased :=
    HighestPriorityApplicableRuleDeterminesOrContributesToDecision;

PolicyConflict :=
    ApplicableRulesProduceIncompatibleEffects;

ConflictResolution SHOULD_BE DeterministicAndAuditable;

AccessDecision :=
    ResultOfAuthorisationEvaluation;

AccessDecision MAY_BE {
    Permit,
    Deny,
    Conditional,
    Indeterminate,
    NotApplicable
};

ConditionalDecision :=
    AccessAllowedOnlyIfSpecifiedObligationsOrConditionsAreSatisfied;

Indeterminate :=
    DecisionCannotBeReliablyComputedBecauseOfMissingInvalidOrConflictingInformation;

NotApplicable :=
    EvaluatedPolicyDoesNotApplyToRequest;

DecisionReason :=
    ExplanationOfRulesConditionsAndEvidenceLeadingToDecision;

ExplainableAccessDecision SHOULD_PRESERVE DecisionReasonWherePolicyAllows;

PolicyScope :=
    ResourcesSubjectsActionsOrContextsToWhichPolicyApplies;

ResourceScope MAY_BE {
    SingleResource,
    ResourceType,
    Collection,
    Hierarchy,
    Tenant,
    Namespace
};

Permission MAY_INHERIT ThroughResourceHierarchyAccordingToExplicitPolicy;

Inheritance MUST_NOT_BE AssumedWithoutPolicySemantics;

ResourceOwner MAY_HAVE AdministrativeAuthority
BUT Ownership DOES_NOT AutomaticallyImplyUnlimitedAccessInMandatoryPolicySystems;

AccessControl MAY_REFERENCE OwnershipMetadata;

AccessControl MAY_REFERENCE LicensingMetadata;

AccessControl MAY_REFERENCE CopyrightMetadata;

RightsOrLicence MAY_LIMIT WhatAccessPolicyCanLegitimatelyPermit;

Embargo :=
    TimeBoundAccessRestriction;

IF CurrentTimeBeforeEmbargoEnd
THEN PublicAccess MAY_BE Denied;

TemporaryPermission :=
    PermissionValidForDefinedTimeWindow;

PermissionExpiry SHOULD_TRIGGER RecalculationOrRevocation;

Delegation :=
    AuthorisedTransferOfLimitedAccessAuthorityFromOneSubjectToAnother;

DelegatedPermission MUST_NOT ExceedDelegatorAuthorityAccordingToPolicy;

Revocation :=
    RemovalOrInvalidationOfPermissionRoleCredentialOrDelegation;

Revocation SHOULD_PROPAGATE ToAffectedAccessDecisionsAndCaches;

AccessControlList :=
    ResourceAssociatedListOfSubjectsOrGroupsAndTheirPermissions;

ACL MAY_DEFINE {
    Subject,
    Permission,
    Denial
};

Capability :=
    PossessionOfUnforgeableOrControlledTokenGrantingSpecificAuthority;

CapabilityBasedAccessControl :=
    AccessBasedOnValidCapabilityRatherThanOnlyIdentityOrRole;

PolicyVersion :=
    IdentifiedRevisionOfAccessPolicy;

PolicyHistory SHOULD_PRESERVE PreviousVersionsWhereAuditabilityRequires;

AccessPolicyChange MAY_INCLUDE {
    AddRule,
    RemoveRule,
    ModifyPermission,
    ModifyRole,
    ModifyCondition,
    ChangeCombiningAlgorithm
};

BreakingAccessChange :=
    PolicyChangeThatExpandsOrReducesEffectiveAccess;

BreakingAccessChange SHOULD_BE {
    Authorised,
    Audited,
    Tested
};

AccessValidation MAY_CHECK {
    SubjectIdentity,
    ResourceIdentity,
    ActionValidity,
    PolicySyntax,
    PermissionScope,
    RoleAssignment,
    ConditionValidity
};

IF SubjectIdentityUnresolved
THEN AccessDecision SHOULD_NOT_BE PermitUnderIdentityDependentPolicy;

IF ResourceIdentityUnresolved
THEN Decision MAY_BE IndeterminateOrDenyAccordingToPolicy;

AccessControlCompleteness :=
    DegreeToWhichRequiredPoliciesPermissionsRolesAndConditionsAreDefined;

AccessControlConsistency :=
    DegreeToWhichRulesAndAssignmentsProduceCoherentExpectedDecisions;

AccessControlIntegrity :=
    PreservationOfAuthorisedPolicyStateAndDecisionEvidence;

AccessControlQuality MAY_INCLUDE {
    Completeness,
    Consistency,
    Integrity,
    LeastPrivilegeAlignment,
    Auditability
};

AuditRecord :=
    RecordOfAccessRequestDecisionOrPolicyChange;

AccessAuditRecord MAY_INCLUDE {
    SubjectIdentifier,
    ResourceIdentifier,
    Action,
    Decision,
    Timestamp,
    PolicyVersion,
    DecisionReason
};

AuditTrail :=
    OrderedCollectionOfAccessAuditRecords;

SuccessfulAndDeniedAccess MAY_BOTH_BE AuditedAccordingToPolicy;

AccessProvenance MAY_INCLUDE {
    PolicySource,
    PolicyVersion,
    Evaluator,
    Timestamp,
    AuthenticationContext
};

AccessConfidence :=
    EstimatedSupportForInferredOrDerivedAccessMetadata;

AccessControlMetadata SHOULD_PREFER DeterministicAuthoritativePolicyOverProbabilisticInferenceForEnforcement;

AI MAY_SUPPORT {
    PolicyAnalysis,
    RoleRecommendation,
    AnomalyDetection,
    PermissionReview,
    NaturalLanguagePolicyExtraction
};

AIGeneratedPolicySuggestion SHOULD_NOT BecomeEnforcedPolicyWithoutRequiredAuthorisationAndValidation;

AnomalousAccess :=
    AccessPatternDifferingFromExpectedBehaviour;

AnomalyDetection MAY_TRIGGER Review
BUT SHOULD_NOT AloneDetermineAuthorisationUnlessPolicyExplicitlyUsesRiskSignals;

RiskBasedAccessControl :=
    AuthorisationConsideringDynamicRiskScoreOrContext;

RiskSignal MAY_INCLUDE {
    DeviceRisk,
    NetworkRisk,
    BehaviouralAnomaly,
    AuthenticationRisk
};

RiskBasedDecision SHOULD_PRESERVE ExplainablePolicyBasisWhereRequired;

AdministrativeMetadata MAY_STORE AccessControlPoliciesAndAssignments;

ProvenanceMetadata MAY_RECORD PolicyChangesAndDecisionHistory;

StructuralMetadata MAY_DEFINE ResourceHierarchyUsedForScopedPermissions;

MetadataRepository MAY_ENFORCE AccessControlAtRecordFieldOrResourceLevel;

MetadataRegistry MAY_REGISTER AccessPropertiesRolesActionsAndPolicyTypes;

KnowledgeGraph MAY_REPRESENT:
    Subject
    -> HAS_ROLE
    -> Role;

Role
    -> HAS_PERMISSION
    -> Permission;

Permission
    -> APPLIES_TO
    -> Resource;

AccessGraph SHOULD_PRESERVE ScopeConditionsAndPolicyVersion;

RDF MAY_REPRESENT AccessRelationshipsAsTypedStatements;

JSONLD MAY_SERIALISE LinkedAccessControlMetadata;

Search MUST_FILTER ResultsAccordingToEffectiveAccessPolicy;

SearchIndex MAY_CONTAIN RestrictedResourceMetadata
BUT QueryResults MUST_NOT LeakProtectedInformationBeyondPolicy;

SemanticSearch MUST_APPLY AccessControlBeforeReturningProtectedContent;

RAG MUST_APPLY AccessControlBeforeAddingProtectedResourceToModelContext;

AccessControlledRAG SHOULD_PRESERVE {
    SubjectIdentityContext,
    ResourceEligibility,
    PolicyDecision,
    Provenance
};

Caching MAY_CREATE AccessLeakRiskIfCachedResultsIgnoreSubjectSpecificPermissions;

AccessAwareCache SHOULD_INCLUDE RelevantAuthorisationContextOrAvoidUnsafeSharing;

AccessControlSecurity MAY_INCLUDE {
    PolicyIntegrity,
    CredentialProtection,
    SessionSecurity,
    AuditProtection,
    ChangeAuthorisation
};

PolicyAdministration SHOULD_BE RestrictedToAuthorisedAdministrativeSubjects;

SeparationOfDuties :=
    PrincipleRequiringMultipleRolesOrAgentsForSensitiveActions;

SensitiveAdministrativeAction MAY_REQUIRE ApprovalFromMultipleAuthorisedAgents;

MachineReadableAccessControl SHOULD_PRESERVE {
    SubjectIdentifier,
    ResourceIdentifier,
    Action,
    PolicyIdentifier,
    PolicyVersion,
    Roles,
    Permissions,
    Restrictions,
    Conditions,
    Decision,
    Provenance
};

# ---------- SEMANTIC REASONING ----------
IF AdministrativeMetadataDeterminesWhetherSubjectMayPerformActionOnResource
THEN AccessControlClassification := supported;

IF AuthenticationSucceeds
THEN Identity MAY_BE Established
BUT Access MUST_STILL_BE Authorised;

IF ExplicitDenyApplies
AND CombiningAlgorithmIsDenyOverrides
THEN AccessDecision := Deny;

IF NoPermitApplies
AND DefaultDenyEnabled
THEN AccessDecision := Deny;

IF PermissionExpired
THEN Permission MUST_NOT AuthoriseNewAccess;

IF RoleRevokedFromSubject
THEN RoleDerivedPermissions SHOULD_NO_LONGER Apply;

IF ResourceClassificationExceedsSubjectClearanceUnderMandatoryPolicy
THEN AccessDecision := Deny;

IF AccessPolicyChanges
THEN CachedAuthorisationDecisions MAY_REQUIRE Invalidation;

# ---------- SEMANTIC EQUIVALENCE ----------
SEMANTIC_EQUIVALENCE {
    "access control" ~= "resource access control";
    "authorisation" ~= "authorization";
    "access policy" ~= "authorisation policy";
    "permission" ~= "access permission" WHEN access_context;
    "denial" ~= "access denial";
    "role-based access control" ~= "RBAC";
    "attribute-based access control" ~= "ABAC";
    "access control list" ~= "ACL";
}

# ---------- QUERY FLOW ----------
QUERY(q) ->
    NORMALISE(q) ->
    IDENTIFY_SUBJECT(q) ->
    RESOLVE_IDENTITY_AND_AUTHENTICATION_CONTEXT(q) ->
    IDENTIFY_RESOURCE(q) ->
    IDENTIFY_REQUESTED_ACTION(q) ->
    RETRIEVE_APPLICABLE_POLICIES(q) ->
    RESOLVE_ROLES_GROUPS_AND_PERMISSIONS(q) ->
    EVALUATE_CONDITIONS_CLASSIFICATION_AND_RESTRICTIONS(q) ->
    RESOLVE_POLICY_CONFLICTS(q) ->
    PRODUCE_ACCESS_DECISION(q) ->
    RECORD_DECISION_PROVENANCE(q) ->
    RETURN_AUTHORISED_RESULT_OR_DENIAL;

# ---------- CONFIDENCE ----------
CONFIDENCE(assertion) :=
    weighted_mean(
        identity_strength,
        policy_authority,
        policy_consistency,
        scope_resolution,
        provenance_quality,
        contextual_relevance
    );

CONFIDENCE >= 0.90 => HIGH;
CONFIDENCE >= 0.70 AND < 0.90 => MODERATE;
CONFIDENCE < 0.70 => REVIEW;

# ---------- AI CONSUMPTION ----------
AI_CONSUMPTION {
    primary_entity: AccessControl;
    ontology: AccessControlOntology;
    parse_entities: true;
    parse_relationships: true;
    preserve_relationship_direction: true;
    resolve_semantic_equivalence: true;
    execute_reasoning_rules: true;
    apply_confidence_weighting: true;
    preserve_provenance: true;
    enforce_access_policy: true;
    default_to_deny_when_required: true;
}

# ---------- UPDATE MODEL ----------
UPDATE_MODEL {
    new_policy:
        assign_policy_identifier
        -> define_scope
        -> define_subject_resource_and_action_rules
        -> define_effects_conditions_and_priority
        -> validate
        -> authorise
        -> version
        -> integrate;

    permission_change:
        identify_subject_or_role
        -> identify_resource_scope
        -> add_modify_or_revoke_permission
        -> validate_least_privilege
        -> audit_change
        -> invalidate_affected_caches
        -> integrate;

    policy_revision:
        preserve_previous_version
        -> apply_authorised_changes
        -> detect_breaking_access_change
        -> test_effective_decisions
        -> audit
        -> invalidate_cached_decisions
        -> regenerate_flow_hash;

    access_request:
        authenticate_or_resolve_identity
        -> evaluate_policy
        -> enforce_decision
        -> record_audit
        -> return_result;

    conflict:
        preserve_policy_sources
        -> apply_combining_algorithm
        -> preserve_decision_reason
        -> flag_review_if_indeterminate;
}

# ---------- FLOW HASH ----------
FLOW_HASH_INPUT :=
    DOMAIN
    + SUBDOMAIN
    + ONTOLOGY
    + AccessEntity
    + IdentityEntity
    + PolicyEntity
    + AuditEntity
    + AccessControl
    + AccessDecision
    + PolicyCombiningAlgorithm
    + RELATIONSHIPS
    + SEMANTIC_REASONING
    + SEMANTIC_EQUIVALENCE
    + UPDATE_MODEL;

FLOW_HASH :=
    HASH(FLOW_HASH_INPUT);

# ---------- TERMINAL ----------
AccessControlOntology
    -> IdentifySubjectIdentityAndAuthenticationContext
    -> IdentifyProtectedResourceAndRequestedAction
    -> RetrieveApplicablePoliciesRolesGroupsAndPermissions
    -> EvaluateSecurityClassificationConditionsAndRestrictions
    -> ResolvePolicyConflictsUsingDefinedCombiningRules
    -> ProducePermitDenyConditionalOrIndeterminateDecision
    -> EnforceLeastPrivilegeAndDefaultPolicy
    -> RecordDecisionReasonAuditAndProvenance
    -> InvalidateAccessWhenRolesPermissionsOrPoliciesChange
    -> ApplyAuthorisationToSearchRAGAndKnowledgeAccess
    -> ProtectRestrictedMetadataAndResourceContent
    -> MaintainVersionedPolicyAndDecisionHistory
    -> MaintainReliableAccessControlKnowledge;

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ