|
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