surrealdb_core/iam/entities/
schema.rs1use cedar_policy::Schema;
2use std::sync::LazyLock;
3
4pub static DEFAULT_CEDAR_SCHEMA: LazyLock<serde_json::Value> = LazyLock::new(|| {
5 serde_json::json!(
6 {
7 "": {
8 "commonTypes": {
9 "Resource": {
11 "type": "Record",
12 "attributes": {
13 "type": { "type": "String", "required": true },
14 "level" : { "type": "Entity", "name": "Level", "required": true },
15 }
16 },
17 },
18 "entityTypes": {
19 "Level": {
21 "shape": {
22 "type": "Record",
23 "attributes": {
24 "type": { "type": "String", "required": true },
25 "ns": { "type": "String", "required": false },
26 "db": { "type": "String", "required": false },
27 "rid": { "type": "String", "required": false },
28 "table": { "type": "String", "required": false },
29 "level" : { "type": "Entity", "name": "Level", "required": true },
30 }
31 },
32 "memberOfTypes": ["Level"],
33 },
34
35 "Any": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
37 "Namespace": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
38 "Database": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
39 "Record": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
40 "Table": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
41 "Document": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
42 "Option": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
43 "Function": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
44 "Analyzer": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
45 "Parameter": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
46 "Event": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
47 "Field": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
48 "Index": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
49 "Access": {"shape": {"type": "Resource"}, "memberOfTypes": ["Level"]},
50
51 "Role": {},
53 "Actor": {
54 "shape": {
55 "type": "Record",
56 "attributes": {
57 "type": { "type": "String", "required": true },
58 "level" : { "type": "Entity", "name": "Level", "required": true },
59 "roles": { "type": "Set", "element": { "type": "Entity", "name": "Role" }, "required": true},
60 },
61 },
62 "memberOfTypes": ["Level"],
63 },
64 },
65 "actions": {
66 "View": {
67 "appliesTo": {
68 "principalTypes": [ "Actor" ],
69 "resourceTypes": [ "Any", "Namespace", "Database", "Record", "Table", "Document", "Option", "Function", "Analyzer", "Parameter", "Event", "Field", "Index", "Access", "Actor" ],
70
71 },
72 },
73 "Edit": {
74 "appliesTo": {
75 "principalTypes": [ "Actor" ],
76 "resourceTypes": [ "Any", "Namespace", "Database", "Record", "Table", "Document", "Option", "Function", "Analyzer", "Parameter", "Event", "Field", "Index", "Access", "Actor" ],
77 },
78 },
79 },
80 }
81 }
82 )
83});
84
85pub fn default_schema() -> Schema {
86 Schema::from_json_value(DEFAULT_CEDAR_SCHEMA.to_owned()).unwrap()
87}
88
89#[cfg(test)]
90mod tests {
91 use super::*;
92
93 #[test]
94 fn test_default_schema() {
95 let schema = default_schema();
96 assert_eq!(schema.action_entities().unwrap().iter().count(), 2);
97 }
98}