|
1 | 1 | """Example to demonstrate usage of permissions. |
2 | 2 |
|
3 | 3 | When running this file, admin will be accessible at /admin. |
4 | | -Check below for valid usernames (and their respective permissions), |
| 4 | +Check near the bottom of the file for valid usernames (and their respective permissions), |
5 | 5 | login will work with any password. |
6 | 6 | """ |
7 | 7 |
|
@@ -46,37 +46,6 @@ async def create_app() -> web.Application: |
46 | 46 | # Create some sample data |
47 | 47 | async with engine.begin() as conn: |
48 | 48 | await conn.run_sync(Base.metadata.create_all) |
49 | | - async with session.begin() as sess: |
50 | | - # Users with various permissions. |
51 | | - sess.add(User(username="admin", permissions=json.dumps(tuple(Permissions)))) |
52 | | - sess.add(User(username="view", permissions=json.dumps((Permissions.view,)))) |
53 | | - sess.add(User(username="add", permissions=json.dumps( |
54 | | - (Permissions.view, Permissions.add,)))) |
55 | | - sess.add(User(username="edit", permissions=json.dumps( |
56 | | - (Permissions.view, Permissions.edit)))) |
57 | | - sess.add(User(username="delete", permissions=json.dumps( |
58 | | - (Permissions.view, Permissions.delete)))) |
59 | | - sess.add(User(username="simple", permissions=json.dumps(("admin.simple.*",)))) |
60 | | - sess.add(User(username="mixed", permissions=json.dumps( |
61 | | - ("admin.simple.view", "admin.simple.edit", "admin.parent.view")))) |
62 | | - sess.add(User(username="negated", permissions=json.dumps( |
63 | | - ("admin.*", "~admin.parent.*", "~admin.simple.edit")))) |
64 | | - sess.add(User(username="field", permissions=json.dumps( |
65 | | - ("admin.*", "~admin.simple.optional_num.*")))) |
66 | | - sess.add(User(username="field_edit", permissions=json.dumps( |
67 | | - ("admin.*", "~admin.simple.optional_num.edit")))) |
68 | | - sess.add(User(username="filter", permissions=json.dumps( |
69 | | - ("admin.*", "admin.simple.*|num=5")))) |
70 | | - sess.add(User(username="filter_edit", permissions=json.dumps( |
71 | | - ("admin.*", "admin.simple.edit|num=5")))) |
72 | | - sess.add(User(username="filter_add", permissions=json.dumps( |
73 | | - ("admin.*", "admin.simple.add|num=5")))) |
74 | | - sess.add(User(username="filter_delete", permissions=json.dumps( |
75 | | - ("admin.*", "admin.simple.delete|num=5")))) |
76 | | - sess.add(User(username="filter_field", permissions=json.dumps( |
77 | | - ("admin.*", "admin.simple.optional_num.*|num=5")))) |
78 | | - sess.add(User(username="filter_field_edit", permissions=json.dumps( |
79 | | - ("admin.*", "admin.simple.optional_num.edit|num=5")))) |
80 | 49 | async with session.begin() as sess: |
81 | 50 | sess.add(Simple(num=5, value="first")) |
82 | 51 | p = Simple(num=82, optional_num=12, value="with child") |
@@ -104,7 +73,35 @@ async def create_app() -> web.Application: |
104 | 73 | {"model": SAResource(engine, SimpleParent)} |
105 | 74 | ) |
106 | 75 | } |
107 | | - aiohttp_admin.setup(app, schema) |
| 76 | + admin = aiohttp_admin.setup(app, schema) |
| 77 | + |
| 78 | + # Create users with various permissions. |
| 79 | + async with session.begin() as sess: |
| 80 | + sess.add(User(username="admin", permissions=json.dumps(tuple(Permissions)))) |
| 81 | + sess.add(User(username="view", permissions=json.dumps((Permissions.view,)))) |
| 82 | + sess.add(User(username="add", permissions=json.dumps( |
| 83 | + (Permissions.view, Permissions.add,)))) |
| 84 | + sess.add(User(username="edit", permissions=json.dumps( |
| 85 | + (Permissions.view, Permissions.edit)))) |
| 86 | + sess.add(User(username="delete", permissions=json.dumps( |
| 87 | + (Permissions.view, Permissions.delete)))) |
| 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") |
| 100 | + } |
| 101 | + for name, permissions in users.items(): |
| 102 | + if any(admin["permission_re"].fullmatch(p) is None for p in permissions): |
| 103 | + raise ValueError("Not a valid permission.") |
| 104 | + sess.add(User(username=name, permissions=json.dumps(permissions))) |
108 | 105 |
|
109 | 106 | return app |
110 | 107 |
|
|
0 commit comments