Coverage for src/edwh_auth_rbac/migrations.py: 100%
9 statements
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-16 17:13 +0200
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-16 17:13 +0200
1from edwh_migrate import migration
4@migration()
5def rbac_migrations(db):
6 db.executesql("""
7 drop view if exists recursive_memberships;
8 """)
9 db.executesql("""
10create view recursive_memberships as
11 -- each root is member of object_id, including one line for himself.
12 -- also for a user
13 with RECURSIVE m(root, object_id, object_type, level, email, firstname, fullname) as (
14 select object_id as root, object_id, object_type, 0, email, firstname, fullname
15 from identity
16 union all
17 select root, membership.member_of, i.object_type, m.level+1, i.email, i.firstname, i.fullname
18 from membership join m on subject == m.object_id
19 join identity i on i.object_id = membership.member_of
20 order by root, m.level+1
21 )
22 select * from m
23;
24""")
26 db.executesql("""
27drop view if exists recursive_members;
29 """)
31 db.executesql("""
32create view recursive_members as
33 with RECURSIVE m(root, object_id, object_type, level, email, firstname, fullname) as (
34 select object_id as root, object_id, object_type, 0, email, firstname, fullname
35 from identity
36 union all
37 select root, membership.subject, i.object_type, m.level+1, i.email, i.firstname, i.fullname
38 from membership join m on member_of== m.object_id
39 join identity i on i.object_id = membership.subject
40 order by root
41 )
42 select * from m
43;
45 """)
47 db.commit()
48 return True