Skip to main content

systemprompt_security/authz/
extension.rs

1use systemprompt_extension::prelude::*;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct AuthzExtension;
5
6impl Extension for AuthzExtension {
7    fn metadata(&self) -> ExtensionMetadata {
8        ExtensionMetadata {
9            id: "authz",
10            name: "Authorization",
11            version: env!("CARGO_PKG_VERSION"),
12        }
13    }
14
15    fn migration_weight(&self) -> u32 {
16        110
17    }
18
19    fn is_required(&self) -> bool {
20        true
21    }
22
23    fn schemas(&self) -> Vec<SchemaDefinition> {
24        vec![
25            SchemaDefinition::new(
26                "access_control_rules",
27                include_str!("schema/access_control_rules.sql"),
28            )
29            .with_required_columns(vec![
30                "id".into(),
31                "entity_type".into(),
32                "entity_id".into(),
33                "rule_type".into(),
34                "rule_value".into(),
35                "access".into(),
36            ]),
37            SchemaDefinition::new(
38                "governance_decisions",
39                include_str!("schema/governance_decisions.sql"),
40            )
41            .with_required_columns(vec![
42                "id".into(),
43                "user_id".into(),
44                "session_id".into(),
45                "tool_name".into(),
46                "decision".into(),
47                "policy".into(),
48                "reason".into(),
49            ]),
50        ]
51    }
52
53    fn dependencies(&self) -> Vec<&'static str> {
54        vec!["users"]
55    }
56}
57
58register_extension!(AuthzExtension);