systemprompt_security/authz/
extension.rs1use systemprompt_extension::prelude::*;
7
8#[derive(Debug, Clone, Copy, Default)]
9pub struct AuthzExtension;
10
11impl Extension for AuthzExtension {
12 fn metadata(&self) -> ExtensionMetadata {
13 ExtensionMetadata {
14 id: "authz",
15 name: "Authorization",
16 version: env!("CARGO_PKG_VERSION"),
17 }
18 }
19
20 fn is_required(&self) -> bool {
21 true
22 }
23
24 fn schemas(&self) -> Vec<SchemaDefinition> {
25 vec![
26 SchemaDefinition::new(
27 "access_control_entities",
28 include_str!("../../schema/access_control_entities.sql"),
29 )
30 .with_required_columns(vec![
31 "entity_type".into(),
32 "entity_id".into(),
33 "default_included".into(),
34 "source".into(),
35 ]),
36 SchemaDefinition::new(
37 "access_control_rules",
38 include_str!("../../schema/access_control_rules.sql"),
39 )
40 .with_required_columns(vec![
41 "id".into(),
42 "entity_type".into(),
43 "entity_id".into(),
44 "rule_type".into(),
45 "rule_value".into(),
46 "access".into(),
47 ]),
48 SchemaDefinition::new(
49 "governance_decisions",
50 include_str!("../../schema/governance_decisions.sql"),
51 )
52 .with_required_columns(vec![
53 "id".into(),
54 "user_id".into(),
55 "session_id".into(),
56 "tool_name".into(),
57 "decision".into(),
58 "policy".into(),
59 "reason".into(),
60 ]),
61 ]
62 }
63
64 fn dependencies(&self) -> Vec<&'static str> {
65 vec!["users"]
66 }
67
68 fn migrations(&self) -> Vec<Migration> {
69 extension_migrations!()
70 }
71}
72
73register_extension!(AuthzExtension);