|
1 | | -//! Resolve a trigger's real location before authorizing an authenticated runtime override. |
| 1 | +//! A trigger override needs its permission on every node the trigger's current job or group writes. |
2 | 2 |
|
3 | 3 | use serde_json::json; |
4 | 4 |
|
5 | 5 | use crate::authorization::main::authorize_session::authorize_session; |
6 | 6 | use crate::authorization::main::deny_authorization::deny; |
7 | | -use crate::credentials::models::{Action, AuditContext, DefaultRole, PermissionScope}; |
| 7 | +use crate::credentials::models::{AuditContext, DefaultRole}; |
8 | 8 | use crate::declarations::_helpers::operator_change::change_trigger_in; |
9 | | -use crate::declarations::models::{TriggerChange, TriggerChangeRequest}; |
| 9 | +use crate::declarations::_helpers::trigger_scope::trigger_scope; |
| 10 | +use crate::declarations::models::TriggerChangeRequest; |
10 | 11 | use crate::store::errors::ControlError; |
11 | | -use crate::store::main::{begin::begin, commit::commit, query::query}; |
12 | | -use crate::store::models::{ControlStore, Parameter, TransactionMode}; |
| 12 | +use crate::store::main::{begin::begin, commit::commit}; |
| 13 | +use crate::store::models::{ControlStore, TransactionMode}; |
13 | 14 |
|
14 | 15 | pub async fn change_person_trigger( |
15 | 16 | store: &ControlStore, |
16 | 17 | (context, credentials): (&AuditContext, (&str, &str)), |
17 | 18 | request: &TriggerChangeRequest, |
18 | 19 | ) -> Result<bool, ControlError> { |
19 | | - let (transaction, rows) = query(begin(store, TransactionMode::Write).await?, |
20 | | - "SELECT location_id,target FROM sqb_triggers WHERE trigger_id=$1 AND removed_in_snapshot_id IS NULL", |
21 | | - vec![Parameter::Id(request.trigger_id)]).await?; |
22 | | - let row = rows |
23 | | - .first() |
24 | | - .ok_or_else(|| ControlError::Invalid("current trigger not found".into()))?; |
25 | | - let scope = PermissionScope { |
26 | | - action: match request.change { |
27 | | - TriggerChange::Enable | TriggerChange::Pause | TriggerChange::ResetDefault => { |
28 | | - Action::TriggerToggle |
29 | | - } |
30 | | - TriggerChange::SetCursor { .. } | TriggerChange::ResetCursor => { |
31 | | - Action::SensorResetCursor |
32 | | - } |
33 | | - }, |
34 | | - location_id: serde_json::from_value(row["location_id"].clone()) |
35 | | - .map_err(|error| ControlError::Invalid(error.to_string()))?, |
36 | | - target: serde_json::from_value(row["target"].clone()) |
37 | | - .map_err(|error| ControlError::Invalid(error.to_string()))?, |
38 | | - nodes: Default::default(), |
39 | | - }; |
| 20 | + let (transaction, scope) = trigger_scope( |
| 21 | + begin(store, TransactionMode::Write).await?, |
| 22 | + context, |
| 23 | + request, |
| 24 | + ) |
| 25 | + .await?; |
40 | 26 | let (transaction, context) = authorize_session( |
41 | 27 | transaction, |
42 | 28 | (context, credentials), |
|
0 commit comments