diff --git a/backend/src/api/model/event.rs b/backend/src/api/model/event.rs index cd0789425..6e5e23ae6 100644 --- a/backend/src/api/model/event.rs +++ b/backend/src/api/model/event.rs @@ -335,8 +335,8 @@ impl AuthorizedEvent { synced_data: None, created: None, metadata: None, - read_roles: vec![], - write_roles: vec![], + read_roles: None, + write_roles: None, })) } else { // We need to load the series as fields were requested that were not preloaded. diff --git a/backend/src/api/model/series.rs b/backend/src/api/model/series.rs index b26cbd16a..d003ad297 100644 --- a/backend/src/api/model/series.rs +++ b/backend/src/api/model/series.rs @@ -12,7 +12,7 @@ use crate::{ acl::{self, Acl}, }, }, - db::{types::{SeriesState as State}, util::impl_from_db}, + db::{types::SeriesState as State, util::impl_from_db}, model::{Key, ExtraMetadata}, prelude::*, }; @@ -31,8 +31,8 @@ pub(crate) struct Series { pub(crate) title: String, pub(crate) created: Option>, pub(crate) metadata: Option, - pub(crate) read_roles: Vec, - pub(crate) write_roles: Vec, + pub(crate) read_roles: Option>, + pub(crate) write_roles: Option>, } #[derive(GraphQLObject)] @@ -98,17 +98,21 @@ impl Series { .pipe(Ok) } - async fn load_acl(&self, context: &Context) -> ApiResult { - let raw_roles_sql = "\ - select unnest($1::text[]) as role, 'read' as action - union - select unnest($2::text[]) as role, 'write' as action - "; - - acl::load_for(context, raw_roles_sql, dbargs![ - &self.read_roles, - &self.write_roles, - ]).await + async fn load_acl(&self, context: &Context) -> ApiResult> { + match (self.read_roles.as_ref(), self.write_roles.as_ref()) { + (None, None) => Ok(None), + (read_roles, write_roles) => { + let raw_roles_sql = "\ + select unnest($1::text[]) as role, 'read' as action + union + select unnest($2::text[]) as role, 'write' as action + "; + + acl::load_for(context, raw_roles_sql, dbargs![&read_roles, &write_roles]) + .await + .map(Some) + } + } } pub(crate) async fn create(series: NewSeries, context: &Context) -> ApiResult { @@ -295,7 +299,7 @@ impl Series { &self.synced_data } - async fn acl(&self, context: &Context) -> ApiResult { + async fn acl(&self, context: &Context) -> ApiResult> { self.load_acl(context).await } diff --git a/frontend/src/schema.graphql b/frontend/src/schema.graphql index a85df02b0..93b4d4f43 100644 --- a/frontend/src/schema.graphql +++ b/frontend/src/schema.graphql @@ -811,7 +811,7 @@ type Series implements Node { created: DateTime metadata: ExtraMetadata syncedData: SyncedSeriesData - acl: [AclItem!]! + acl: [AclItem!] hostRealms: [Realm!]! entries: [VideoListEntry!]! """