Skip to content

Commit 8781987

Browse files
feat(schema): make acl permissions schema unique (#9999)
* Make acl permissions schema unique * Add change file * use a hashset * fix cli * Revert "use a hashset" This reverts commit 778d316. * Revert "fix cli" This reverts commit cfc0e39. --------- Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
1 parent 1601da5 commit 8781987

5 files changed

Lines changed: 27 additions & 3 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-utils": patch:enhance
3+
---
4+
5+
Mark ACL `permissions` array with unique items

core/tauri-acl-schema/capability-schema.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@
5252
"type": "array",
5353
"items": {
5454
"$ref": "#/definitions/PermissionEntry"
55-
}
55+
},
56+
"uniqueItems": true
5657
},
5758
"platforms": {
5859
"description": "Limit which target platforms this capability applies to.\n\n By default all platforms are targeted.\n\n ## Example\n\n `[\"macOS\",\"windows\"]`",

core/tauri-config-schema/schema.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,8 @@
11261126
"type": "array",
11271127
"items": {
11281128
"$ref": "#/definitions/PermissionEntry"
1129-
}
1129+
},
1130+
"uniqueItems": true
11301131
},
11311132
"platforms": {
11321133
"description": "Limit which target platforms this capability applies to.\n\n By default all platforms are targeted.\n\n ## Example\n\n `[\"macOS\",\"windows\"]`",

core/tauri-utils/src/acl/capability.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ pub struct Capability {
157157
/// "allow": [{ "path": "$HOME/test.txt" }]
158158
/// }
159159
/// ```
160+
#[cfg_attr(feature = "schema", schemars(schema_with = "unique_permission"))]
160161
pub permissions: Vec<PermissionEntry>,
161162
/// Limit which target platforms this capability applies to.
162163
///
@@ -169,6 +170,21 @@ pub struct Capability {
169170
pub platforms: Option<Vec<Target>>,
170171
}
171172

173+
#[cfg(feature = "schema")]
174+
fn unique_permission(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
175+
use schemars::schema;
176+
schema::SchemaObject {
177+
instance_type: Some(schema::InstanceType::Array.into()),
178+
array: Some(Box::new(schema::ArrayValidation {
179+
unique_items: Some(true),
180+
items: Some(gen.subschema_for::<PermissionEntry>().into()),
181+
..Default::default()
182+
})),
183+
..Default::default()
184+
}
185+
.into()
186+
}
187+
172188
fn default_capability_local() -> bool {
173189
true
174190
}

tooling/cli/schema.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,8 @@
11261126
"type": "array",
11271127
"items": {
11281128
"$ref": "#/definitions/PermissionEntry"
1129-
}
1129+
},
1130+
"uniqueItems": true
11301131
},
11311132
"platforms": {
11321133
"description": "Limit which target platforms this capability applies to.\n\n By default all platforms are targeted.\n\n ## Example\n\n `[\"macOS\",\"windows\"]`",

0 commit comments

Comments
 (0)