|
16 | 16 | import aiohttp_admin |
17 | 17 | from _models import Base, Simple, SimpleParent |
18 | 18 | from aiohttp_admin import Permissions, UserDetails |
19 | | -from aiohttp_admin.backends.sqlalchemy import SAResource |
| 19 | +from aiohttp_admin.backends.sqlalchemy import SAResource, permission_for as p |
20 | 20 |
|
21 | 21 |
|
22 | 22 | class User(Base): |
@@ -48,14 +48,14 @@ async def create_app() -> web.Application: |
48 | 48 | await conn.run_sync(Base.metadata.create_all) |
49 | 49 | async with session.begin() as sess: |
50 | 50 | sess.add(Simple(num=5, value="first")) |
51 | | - p = Simple(num=82, optional_num=12, value="with child") |
52 | | - sess.add(p) |
| 51 | + p_simple = Simple(num=82, optional_num=12, value="with child") |
| 52 | + sess.add(p_simple) |
53 | 53 | sess.add(Simple(num=5, value="second")) |
54 | 54 | sess.add(Simple(num=5, value="3")) |
55 | 55 | sess.add(Simple(num=5, optional_num=42, value="4")) |
56 | 56 | sess.add(Simple(num=5, value="5")) |
57 | 57 | async with session.begin() as sess: |
58 | | - sess.add(SimpleParent(id=p.id, date=datetime(2023, 2, 13, 19, 4))) |
| 58 | + sess.add(SimpleParent(id=p_simple.id, date=datetime(2023, 2, 13, 19, 4))) |
59 | 59 |
|
60 | 60 | app = web.Application() |
61 | 61 | app["db"] = session |
@@ -86,17 +86,19 @@ async def create_app() -> web.Application: |
86 | 86 | sess.add(User(username="delete", permissions=json.dumps( |
87 | 87 | (Permissions.view, Permissions.delete)))) |
88 | 88 | users = { |
89 | | - "simple": ("admin.simple.*",), |
90 | | - "mixed": ("admin.simple.view", "admin.simple.edit", "admin.parent.view"), |
91 | | - "negated": ("admin.*", "~admin.parent.*", "~admin.simple.edit"), |
92 | | - "field": ("admin.*", "~admin.simple.optional_num.*"), |
93 | | - "field_edit": ("admin.*", "~admin.simple.optional_num.edit"), |
94 | | - "filter": ("admin.*", "admin.simple.*|num=5"), |
95 | | - "filter_edit": ("admin.*", "admin.simple.edit|num=5"), |
96 | | - "filter_add": ("admin.*", "admin.simple.add|num=5"), |
97 | | - "filter_delete": ("admin.*", "admin.simple.delete|num=5"), |
98 | | - "filter_field": ("admin.*", "admin.simple.optional_num.*|num=5"), |
99 | | - "filter_field_edit": ("admin.*", "admin.simple.optional_num.edit|num=5") |
| 89 | + "simple": (p(Simple),), |
| 90 | + "mixed": (p(Simple, "view"), p(Simple, "edit"), p(SimpleParent, "view")), |
| 91 | + "negated": (Permissions.all, p(SimpleParent, negated=True), |
| 92 | + p(Simple, "edit", negated=True)), |
| 93 | + "field": (Permissions.all, p(Simple.optional_num, negated=True)), |
| 94 | + "field_edit": (Permissions.all, p(Simple.optional_num, "edit", negated=True)), |
| 95 | + "filter": (Permissions.all, p(Simple, filters={Simple.num: 5})), |
| 96 | + "filter_edit": (Permissions.all, p(Simple, "edit", filters={Simple.num: 5})), |
| 97 | + "filter_add": (Permissions.all, p(Simple, "add", filters={Simple.num: 5})), |
| 98 | + "filter_delete": (Permissions.all, p(Simple, "delete", filters={Simple.num: 5})), |
| 99 | + "filter_field": (Permissions.all, p(Simple.optional_num, filters={Simple.num: 5})), |
| 100 | + "filter_field_edit": (Permissions.all, p(Simple.optional_num, "edit", |
| 101 | + filters={Simple.num: 5})) |
100 | 102 | } |
101 | 103 | for name, permissions in users.items(): |
102 | 104 | if any(admin["permission_re"].fullmatch(p) is None for p in permissions): |
|
0 commit comments