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 SchemaDefinition::new(
62 "approval_requests",
63 include_str!("../../schema/approval_requests.sql"),
64 )
65 .with_required_columns(vec![
66 "call_id".into(),
67 "tool_name".into(),
68 "args_digest".into(),
69 "requested_by".into(),
70 "status".into(),
71 "expires_at".into(),
72 ]),
73 ]
74 }
75
76 fn dependencies(&self) -> Vec<&'static str> {
77 vec!["users"]
78 }
79
80 fn migrations(&self) -> Vec<Migration> {
81 extension_migrations!()
82 }
83}
84
85register_extension!(AuthzExtension);