Skip to content

Commit bb23511

Browse files
authored
feat: enhance multiple capabilities file format & fix mixed permissions schema (#9079)
* feat: enhance multiple capabilities file format & fix mixed permissions schema * change files
1 parent 4bf1c55 commit bb23511

7 files changed

Lines changed: 24 additions & 13 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-build": patch:bug
3+
---
4+
5+
Fixed generation of capability schema for permissions field which previously disallowed mixed (strings and objects) permission definition.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-utils": major:breaking
3+
---
4+
5+
Changed `CapabiltyFile::List` enum variant to be a tuple-struct and added `CapabiltyFile::NamedList`. This allows more flexibility when parsing capabilties from JSON files.

core/tauri-build/src/acl.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ fn capabilities_schema(acl_manifests: &BTreeMap<String, Manifest>) -> RootSchema
168168
if let Some(Schema::Object(obj)) = schema.definitions.get_mut("PermissionEntry") {
169169
let permission_entry_any_of_schemas = obj.subschemas().any_of.as_mut().unwrap();
170170

171-
if let Schema::Object(mut scope_extended_schema_obj) =
172-
permission_entry_any_of_schemas.remove(permission_entry_any_of_schemas.len() - 1)
171+
if let Schema::Object(scope_extended_schema_obj) =
172+
permission_entry_any_of_schemas.last_mut().unwrap()
173173
{
174174
let mut global_scope_one_of = Vec::new();
175175

@@ -246,8 +246,6 @@ fn capabilities_schema(acl_manifests: &BTreeMap<String, Manifest>) -> RootSchema
246246
one_of: Some(global_scope_one_of),
247247
..Default::default()
248248
}));
249-
250-
permission_entry_any_of_schemas.push(scope_extended_schema_obj.into());
251249
};
252250
}
253251
}

core/tauri-codegen/src/context.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
425425
CapabilityFile::Capability(c) => {
426426
capabilities.insert(c.identifier.clone(), c);
427427
}
428-
CapabilityFile::List {
428+
CapabilityFile::List(capabilities_list)
429+
| CapabilityFile::NamedList {
429430
capabilities: capabilities_list,
430431
} => {
431432
capabilities.extend(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ pub fn parse_capabilities(
136136
CapabilityFile::Capability(capability) => {
137137
capabilities_map.insert(capability.identifier.clone(), capability);
138138
}
139-
CapabilityFile::List { capabilities } => {
139+
CapabilityFile::List(capabilities) | CapabilityFile::NamedList { capabilities } => {
140140
for capability in capabilities {
141141
capabilities_map.insert(capability.identifier.clone(), capability);
142142
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ pub enum CapabilityFile {
110110
/// A single capability.
111111
Capability(Capability),
112112
/// A list of capabilities.
113-
List {
113+
List(Vec<Capability>),
114+
/// A list of capabilities.
115+
NamedList {
114116
/// The list of capabilities.
115117
capabilities: Vec<Capability>,
116118
},
@@ -135,11 +137,9 @@ impl FromStr for CapabilityFile {
135137
type Err = super::Error;
136138

137139
fn from_str(s: &str) -> Result<Self, Self::Err> {
138-
match s.chars().next() {
139-
Some('[') => toml::from_str(s).map_err(Into::into),
140-
Some('{') => serde_json::from_str(s).map_err(Into::into),
141-
_ => Err(super::Error::UnknownCapabilityFormat(s.into())),
142-
}
140+
serde_json::from_str(s)
141+
.or_else(|_| toml::from_str(s))
142+
.map_err(Into::into)
143143
}
144144
}
145145

core/tauri/src/ipc/authority.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,9 @@ impl RuntimeAuthority {
243243
CapabilityFile::Capability(c) => {
244244
capabilities.insert(c.identifier.clone(), c);
245245
}
246-
CapabilityFile::List {
246+
247+
CapabilityFile::List(capabilities_list)
248+
| CapabilityFile::NamedList {
247249
capabilities: capabilities_list,
248250
} => {
249251
capabilities.extend(

0 commit comments

Comments
 (0)