Browse Source

fix authorization decorator with context and show hapic+authorization example with exception

Guénaël Muller 7 years ago
parent
commit
24dbc02419

+ 4 - 4
tracim/lib/utils/authorization.py View File

@@ -53,10 +53,10 @@ def require_profile(group):
53 53
     :return:
54 54
     """
55 55
     def decorator(func):
56
-        def wrapper(self, request: 'TracimRequest'):
56
+        def wrapper(self, context, request: 'TracimRequest'):
57 57
             user = request.current_user
58 58
             if user.profile.id >= group:
59
-                return func(self, request)
59
+                return func(self, context, request)
60 60
             raise InsufficientUserProfile()
61 61
         return wrapper
62 62
     return decorator
@@ -72,11 +72,11 @@ def require_workspace_role(minimal_required_role):
72 72
     """
73 73
     def decorator(func):
74 74
 
75
-        def wrapper(self, request: 'TracimRequest'):
75
+        def wrapper(self, context, request: 'TracimRequest'):
76 76
             user = request.current_user
77 77
             workspace = request.current_workspace
78 78
             if workspace.get_user_role(user) >= minimal_required_role:
79
-                return func(self, request)
79
+                return func(self, context, request)
80 80
             raise InsufficientUserWorkspaceRole()
81 81
 
82 82
         return wrapper

+ 9 - 0
tracim/views/example_api/example_api_controller.py View File

@@ -1,12 +1,16 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 # TODO - G.M - 10-04-2018 - [cleanup][tempExample] - Drop this file
3 3
 from datetime import datetime
4
+from http import HTTPStatus
4 5
 
5 6
 from pyramid.config import Configurator
6 7
 
7 8
 from hapic.data import HapicData
8 9
 
10
+from tracim.exceptions import InsufficientUserWorkspaceRole, NotAuthentificated
9 11
 from tracim.extensions import hapic
12
+from tracim.lib.utils.authorization import require_workspace_role
13
+from tracim.models.data import UserRoleInWorkspace
10 14
 from tracim.views.controllers import Controller
11 15
 from tracim.views.example_api.schema import *
12 16
 
@@ -24,8 +28,13 @@ class ExampleApiController(Controller):
24 28
             'datetime': datetime(2017, 12, 7, 10, 55, 8, 488996),
25 29
         }
26 30
 
31
+    @hapic.handle_exception(
32
+        NotAuthentificated,
33
+        http_code=HTTPStatus.BAD_REQUEST
34
+    )
27 35
     @hapic.with_api_doc()
28 36
     @hapic.output_body(ListsUserSchema())
37
+    @require_workspace_role(UserRoleInWorkspace.READER)
29 38
     def get_users(self, context, request):
30 39
         """
31 40
         Obtain users list.