소스 검색

can_write predicate

sferot 11 년 전
부모
커밋
8075c43990
2개의 변경된 파일28개의 추가작업 그리고 0개의 파일을 삭제
  1. 9 0
      pboard/pboard/controllers/api.py
  2. 19 0
      pboard/pboard/lib/auth.py

+ 9 - 0
pboard/pboard/controllers/api.py 파일 보기

24
 from pboard.lib   import dbapi as pld
24
 from pboard.lib   import dbapi as pld
25
 from pboard.model import data as pmd
25
 from pboard.model import data as pmd
26
 from pboard import model as pm
26
 from pboard import model as pm
27
+from pboard.lib.auth import can_read, can_write
27
 
28
 
28
 __all__ = ['PODPublicApiController', 'PODApiController']
29
 __all__ = ['PODPublicApiController', 'PODApiController']
29
 
30
 
127
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
128
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
128
 
129
 
129
     @expose()
130
     @expose()
131
+    @require(can_read())
130
     def get_file_content(self, node_id=None, **kw):
132
     def get_file_content(self, node_id=None, **kw):
131
       if node_id==None:
133
       if node_id==None:
132
         return
134
         return
163
         return loResultBuffer.getvalue()
165
         return loResultBuffer.getvalue()
164
 
166
 
165
     @expose()
167
     @expose()
168
+    @require(can_write())
166
     def set_parent_node(self, node_id, new_parent_id, **kw):
169
     def set_parent_node(self, node_id, new_parent_id, **kw):
167
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
170
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
168
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
171
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
175
       redirect(lurl('/document/%s'%(node_id)))
178
       redirect(lurl('/document/%s'%(node_id)))
176
 
179
 
177
     @expose()
180
     @expose()
181
+    @require(can_write())
178
     def move_node_upper(self, node_id=0):
182
     def move_node_upper(self, node_id=0):
179
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
183
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
180
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
184
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
185
       redirect(lurl('/document/%s'%(node_id)))
189
       redirect(lurl('/document/%s'%(node_id)))
186
 
190
 
187
     @expose()
191
     @expose()
192
+    @require(can_write())
188
     def move_node_lower(self, node_id=0):
193
     def move_node_lower(self, node_id=0):
189
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
194
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
190
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
195
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
220
       redirect(lurl('/document/%i'%(loNewNode.node_id)))
225
       redirect(lurl('/document/%i'%(loNewNode.node_id)))
221
 
226
 
222
     @expose()
227
     @expose()
228
+    @require(can_write())
223
     def edit_status(self, node_id, node_status):
229
     def edit_status(self, node_id, node_status):
224
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
230
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
225
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
231
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
229
       redirect(lurl('/document/%s'%(node_id)))
235
       redirect(lurl('/document/%s'%(node_id)))
230
 
236
 
231
     @expose()
237
     @expose()
238
+    @require(can_write())
232
     def edit_label_and_content(self, node_id, data_label, data_content):
239
     def edit_label_and_content(self, node_id, data_label, data_content):
233
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
240
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
234
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
241
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
239
       redirect(lurl('/document/%s'%(node_id)))
246
       redirect(lurl('/document/%s'%(node_id)))
240
 
247
 
241
     @expose()
248
     @expose()
249
+    @require(can_write())
242
     def force_delete_node(self, node_id=None):
250
     def force_delete_node(self, node_id=None):
243
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
251
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
244
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
252
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
270
       redirect(lurl('/document/%s'%(back_to_node_id)))
278
       redirect(lurl('/document/%s'%(back_to_node_id)))
271
 
279
 
272
     @expose()
280
     @expose()
281
+    @require(can_write())
273
     def toggle_share_status(self, node_id):
282
     def toggle_share_status(self, node_id):
274
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
283
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
275
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
284
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)

+ 19 - 0
pboard/pboard/lib/auth.py 파일 보기

22
                 and node_id = :node""", {"mail":credentials["repoze.who.userid"], "node":node_id})
22
                 and node_id = :node""", {"mail":credentials["repoze.who.userid"], "node":node_id})
23
         if has_right.rowcount == 0 :
23
         if has_right.rowcount == 0 :
24
             self.unmet()
24
             self.unmet()
25
+
26
+class can_write(Predicate):
27
+    message = ""
28
+
29
+    def __init__(self, **kwargs):
30
+        pass
31
+
32
+    def evaluate(self, environ, credentials):
33
+        node_id = environ['webob.adhoc_attrs']['validation']['values']['node_id']
34
+        has_right = session.execute("""
35
+                select *
36
+                from pod_group_node pgn
37
+                join pod_user_group pug on pug.group_id = pgn.group_id
38
+                join pod_user pu on pug.user_id = pu.user_id
39
+                where rights > 1
40
+                and email_address = :mail
41
+                and node_id = :node""", {"mail":credentials["repoze.who.userid"], "node":node_id})
42
+        if has_right.rowcount == 0 :
43
+            self.unmet()