Skip to content

Commit

Permalink
H-1920: Fix authorization relationship updates on circular types (#3895)
Browse files Browse the repository at this point in the history
  • Loading branch information
TimDiekmann authored Jan 17, 2024
1 parent 31b2917 commit 0441f63
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ impl<C: AsClient> DataTypeStore for PostgresStore<C> {
},
};

let mut relationships = Vec::new();
let mut relationships = HashSet::new();

let mut inserted_data_type_metadata = Vec::new();
for (schema, metadata) in data_types {
Expand All @@ -171,7 +171,7 @@ impl<C: AsClient> DataTypeStore for PostgresStore<C> {
.assert_permission()
.change_context(InsertionError)?;

relationships.push((
relationships.insert((
data_type_id,
DataTypeRelationAndSubject::Owner {
subject: DataTypeOwnerSubject::Web { id: *owned_by_id },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ impl<C: AsClient> EntityTypeStore for PostgresStore<C> {
},
};

let mut relationships = Vec::new();
let mut relationships = HashSet::new();

let mut inserted_entity_types = Vec::new();
let mut inserted_entity_type_metadata =
Expand Down Expand Up @@ -466,7 +466,7 @@ impl<C: AsClient> EntityTypeStore for PostgresStore<C> {
.assert_permission()
.change_context(InsertionError)?;

relationships.push((
relationships.insert((
entity_type_id,
EntityTypeRelationAndSubject::Owner {
subject: EntityTypeOwnerSubject::Web { id: *owned_by_id },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ impl<C: AsClient> PropertyTypeStore for PostgresStore<C> {
},
};

let mut relationships = Vec::new();
let mut relationships = HashSet::new();

let mut inserted_property_types = Vec::new();
let mut inserted_property_type_metadata =
Expand All @@ -300,7 +300,7 @@ impl<C: AsClient> PropertyTypeStore for PostgresStore<C> {
.assert_permission()
.change_context(InsertionError)?;

relationships.push((
relationships.insert((
property_type_id,
PropertyTypeRelationAndSubject::Owner {
subject: PropertyTypeOwnerSubject::Web { id: *owned_by_id },
Expand Down
4 changes: 2 additions & 2 deletions libs/@local/hash-authorization/src/schema/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};

use crate::zanzibar::types::{Resource, Subject};

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum AccountNamespace {
#[serde(rename = "graph/account")]
Account,
Expand Down Expand Up @@ -47,7 +47,7 @@ impl Subject for AccountId {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PublicAccess {
#[serde(rename = "*")]
Public,
Expand Down
18 changes: 9 additions & 9 deletions libs/@local/hash-authorization/src/schema/data_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
},
};

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum DataTypeNamespace {
#[serde(rename = "graph/data_type")]
DataType,
Expand Down Expand Up @@ -71,7 +71,7 @@ impl Resource for DataTypeId {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DataTypeResourceRelation {
Owner,
Expand All @@ -80,7 +80,7 @@ pub enum DataTypeResourceRelation {

impl Relation<DataTypeId> for DataTypeResourceRelation {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum DataTypePermission {
Expand All @@ -90,22 +90,22 @@ pub enum DataTypePermission {

impl Permission<DataTypeId> for DataTypePermission {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", tag = "type", content = "id")]
pub enum DataTypeSubject {
Web(OwnedById),
Public,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum DataTypeSubjectNamespace {
#[serde(rename = "graph/web")]
Web,
#[serde(rename = "graph/account")]
Account,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DataTypeSubjectId {
Uuid(Uuid),
Expand Down Expand Up @@ -149,7 +149,7 @@ impl Resource for DataTypeSubject {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum DataTypeOwnerSubject {
Expand All @@ -159,14 +159,14 @@ pub enum DataTypeOwnerSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum DataTypeViewerSubject {
Public,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "relation")]
pub enum DataTypeRelationAndSubject {
Expand Down
18 changes: 9 additions & 9 deletions libs/@local/hash-authorization/src/schema/entity_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,14 @@ pub enum EntityTypePermission {

impl Permission<EntityTypeId> for EntityTypePermission {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub enum EntityTypeSetting {
UpdateFromWeb,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", tag = "type", content = "id")]
pub enum EntityTypeSubject {
Web(OwnedById),
Expand All @@ -114,7 +114,7 @@ pub enum EntityTypeSubject {
AccountGroup(AccountGroupId),
}

#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EntityTypeSubjectSet {
#[default]
Expand Down Expand Up @@ -207,7 +207,7 @@ impl Resource for EntityTypeSubject {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum EntityTypeOwnerSubject {
Expand All @@ -217,7 +217,7 @@ pub enum EntityTypeOwnerSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum EntityTypeSettingSubject {
Expand All @@ -227,7 +227,7 @@ pub enum EntityTypeSettingSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum EntityTypeEditorSubject {
Expand All @@ -243,14 +243,14 @@ pub enum EntityTypeEditorSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum EntityTypeViewerSubject {
Public,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum EntityTypeInstantiatorSubject {
Expand All @@ -267,7 +267,7 @@ pub enum EntityTypeInstantiatorSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "relation")]
pub enum EntityTypeRelationAndSubject {
Expand Down
26 changes: 13 additions & 13 deletions libs/@local/hash-authorization/src/schema/property_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use crate::{
},
};

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PropertyTypeNamespace {
#[serde(rename = "graph/property_type")]
PropertyType,
Expand Down Expand Up @@ -74,7 +74,7 @@ impl Resource for PropertyTypeId {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PropertyTypeResourceRelation {
Owner,
Expand All @@ -85,7 +85,7 @@ pub enum PropertyTypeResourceRelation {

impl Relation<PropertyTypeId> for PropertyTypeResourceRelation {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum PropertyTypePermission {
Expand All @@ -95,14 +95,14 @@ pub enum PropertyTypePermission {

impl Permission<PropertyTypeId> for PropertyTypePermission {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub enum PropertyTypeSetting {
UpdateFromWeb,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", tag = "type", content = "id")]
pub enum PropertyTypeSubject {
Web(OwnedById),
Expand All @@ -112,7 +112,7 @@ pub enum PropertyTypeSubject {
AccountGroup(AccountGroupId),
}

#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PropertyTypeSubjectSet {
#[default]
Expand All @@ -121,7 +121,7 @@ pub enum PropertyTypeSubjectSet {

impl Relation<PropertyTypeSubject> for PropertyTypeSubjectSet {}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PropertyTypeSubjectNamespace {
#[serde(rename = "graph/web")]
Web,
Expand All @@ -133,7 +133,7 @@ pub enum PropertyTypeSubjectNamespace {
AccountGroup,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PropertyTypeSubjectId {
Uuid(Uuid),
Expand Down Expand Up @@ -205,7 +205,7 @@ impl Resource for PropertyTypeSubject {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum PropertyTypeOwnerSubject {
Expand All @@ -215,7 +215,7 @@ pub enum PropertyTypeOwnerSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum PropertyTypeSettingSubject {
Expand All @@ -225,7 +225,7 @@ pub enum PropertyTypeSettingSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum PropertyTypeEditorSubject {
Expand All @@ -241,14 +241,14 @@ pub enum PropertyTypeEditorSubject {
},
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "kind", deny_unknown_fields)]
pub enum PropertyTypeViewerSubject {
Public,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase", tag = "relation")]
pub enum PropertyTypeRelationAndSubject {
Expand Down

0 comments on commit 0441f63

Please sign in to comment.