use models::space::spaces; use space::share::authz::{MANAGE_CHANNELS, effective_permissions}; use crate::errors::IssueError; use crate::services::service::IssueService; pub async fn require_board_manage( service: &IssueService, space: &spaces::Model, caller: i64, ) -> Result<(), IssueError> { if is_board_manager(service, space, caller).await? { Ok(()) } else { Err(IssueError::Forbidden) } } pub async fn is_board_manager( service: &IssueService, space: &spaces::Model, caller: i64, ) -> Result { if space.owner_user_id == caller { return Ok(true); } let perms = effective_permissions(&service.state, space, caller) .await .map_err(IssueError::from)?; Ok(perms.has(MANAGE_CHANNELS)) }