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

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

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