@@ -112,12 +112,12 @@ def _get_one(self,key):
112
112
roles = GET .get ("roles" )
113
113
permission_check_ok = False
114
114
if not params_role :
115
- if hasattr (request ,"user" ):
115
+ if hasattr (request ,"user" ) and request . user :
116
116
params_role = "LOGIN"
117
117
else :
118
118
params_role = "UNKNOWN"
119
119
elif params_role != "UNKNOWN" :
120
- if not hasattr (request ,"user" ):
120
+ if not ( hasattr (request ,"user" ) and request . user ):
121
121
return json ({"code" :400 ,"msg" :"no login user for role '%s'" % (params_role )})
122
122
if params_role not in roles :
123
123
return json ({"code" :400 ,"msg" :"'%s' not accessible by role '%s'" % (model_name ,params_role )})
@@ -200,57 +200,61 @@ def _filter_owner(self,model,model_setting,q):
200
200
201
201
def _expr (self ,model ,model_param ,model_expr ):
202
202
if not isinstance (model_expr ,list ):
203
- raise UliwebError ("only accept array in @expr: '%s'" % (model_expr ))
203
+ raise UliwebError ("only accept array in @expr, but get '%s'" % (model_expr ))
204
204
num = len (model_expr )
205
205
if (num < 2 or num > 3 ):
206
- raise UliwebError ("only accept 2 or 3 items in @expr: '%s'" % (model_expr ))
206
+ raise UliwebError ("only accept 2 or 3 items in @expr, but get '%s'" % (model_expr ))
207
207
op = model_expr [- 2 ]
208
208
if op == '&' :
209
209
if num != 3 :
210
- raise UliwebError ("'&'(and) expression need 3 items: '%s'" % (model_expr ))
210
+ raise UliwebError ("'&'(and) expression need 3 items, but get '%s'" % (model_expr ))
211
211
c1 = self ._get_filter_condition (model ,model_param ,model_expr [0 ],expr = True )
212
212
c2 = self ._get_filter_condition (model ,model_param ,model_expr [2 ],expr = True )
213
213
return and_ (c1 ,c2 )
214
214
elif op == '|' :
215
215
if num != 3 :
216
- raise UliwebError ("'|'(or) expression need 3 items: '%s'" % (model_expr ))
216
+ raise UliwebError ("'|'(or) expression need 3 items, but get '%s'" % (model_expr ))
217
217
c1 = self ._get_filter_condition (model ,model_param ,model_expr [0 ],expr = True )
218
218
c2 = self ._get_filter_condition (model ,model_param ,model_expr [2 ],expr = True )
219
219
return or_ (c1 ,c2 )
220
220
elif op == '!' :
221
221
if num != 2 :
222
- raise UliwebError ("'!'(not) expression need 2 items: '%s'" % (model_expr ))
222
+ raise UliwebError ("'!'(not) expression need 2 items, but get '%s'" % (model_expr ))
223
223
return not_ (self ._get_filter_condition (model ,model_param ,model_expr [1 ],expr = True ))
224
224
else :
225
225
raise UliwebError ("unknown operator: '%s'" % (op ))
226
226
227
227
def _get_filter_condition (self ,model ,model_param ,item ,expr = False ):
228
+ #item can be param key, or expr which expected to be a list
228
229
if isinstance (item ,list ):
229
230
if expr :
230
231
return self ._expr (model ,model_param ,model_expr = item )
231
232
else :
232
- raise UliwebError ("item can be array only in @expr: '%s'" % (item ))
233
+ #current implementation won't run here, but keep for safe
234
+ raise UliwebError ("item can be list only in @expr: '%s'" % (item ))
233
235
if not isinstance (item ,string_types ):
236
+ #current implementation won't run here, but keep for safe
234
237
raise UliwebError ("item should be array or string: '%s'" % (item ))
235
238
n = item
236
239
if n [0 ]== "@" :
240
+ #current implementation won't run here, but keep for safe
237
241
raise UliwebError ("param key should not begin with @: '%s'" % (n ))
238
242
if n [- 1 ]== "$" :
239
243
name = n [:- 1 ]
240
244
if hasattr (model ,name ):
241
245
return getattr (model .c ,name ).like (model_param [n ])
242
246
else :
243
- raise UliwebError ("'%s' does not have '%s'" % (model_name , name ))
247
+ raise UliwebError ("model does not have this column: '%s'" % (name ))
244
248
elif n [- 1 ]== "}" and n [- 2 ]== "{" :
245
249
name = n [:- 2 ]
246
250
if hasattr (model ,name ):
247
- # TODO
251
+ # TODO: https://github.com/APIJSON/APIJSON/blob/master/Document.md#32-%E5%8A%9F%E8%83%BD%E7%AC%A6
248
252
pass
249
253
raise UliwebError ("still not support '%s'" % (name ))
250
254
elif hasattr (model ,n ):
251
255
return getattr (model .c ,n )== model_param [n ]
252
256
else :
253
- raise UliwebError ("not support item: '%s'" % (item ))
257
+ raise UliwebError ("non-existent column or not support item: '%s'" % (item ))
254
258
255
259
def head (self ):
256
260
try :
@@ -286,18 +290,21 @@ def _head(self,key):
286
290
roles = HEAD .get ("roles" )
287
291
permission_check_ok = False
288
292
if not params_role :
289
- if request .user :
293
+ if hasattr ( request , "user" ) and request .user :
290
294
params_role = "LOGIN"
291
295
else :
292
296
params_role = "UNKNOWN"
293
297
if params_role not in roles :
294
- return json ({"code" :400 ,"msg" :"'%s' not accessible by role '%s'" % (model_name , params_role )})
298
+ return json ({"code" :400 ,"msg" :"role '%s' not have permission HEAD for '%s'" % (params_role , model_name )})
295
299
if params_role == "UNKNOWN" :
296
300
permission_check_ok = True
301
+ elif not (hasattr (request ,"user" ) and request .user ):
302
+ return json ({"code" :400 ,"msg" :"no login user for role '%s'" % (params_role )})
297
303
elif functions .has_role (request .user ,params_role ):
298
304
permission_check_ok = True
299
305
else :
300
306
return json ({"code" :400 ,"msg" :"user doesn't have role '%s'" % (params_role )})
307
+ #current implementation won't run here, but keep for safe
301
308
if not permission_check_ok :
302
309
return json ({"code" :400 ,"msg" :"no permission" })
303
310
@@ -381,7 +388,7 @@ def _post_one(self,key,tag):
381
388
if roles :
382
389
for role in roles :
383
390
if role == "OWNER" :
384
- if request .user :
391
+ if hasattr ( request , "user" ) and request .user :
385
392
permission_check_ok = True
386
393
if user_id_field :
387
394
params [user_id_field ] = request .user .id
@@ -500,7 +507,7 @@ def _put_one(self,key,tag):
500
507
if roles :
501
508
for role in roles :
502
509
if role == "OWNER" :
503
- if request .user :
510
+ if hasattr ( request , "user" ) and request .user :
504
511
if user_id_field :
505
512
if obj .to_dict ().get (user_id_field )== request .user .id :
506
513
permission_check_ok = True
@@ -535,6 +542,8 @@ def _put_one(self,key,tag):
535
542
for k in params :
536
543
if k == "id" :
537
544
continue
545
+ elif k [0 ]== "@" :
546
+ continue
538
547
elif hasattr (obj ,k ):
539
548
kwargs [k ] = params [k ]
540
549
else :
@@ -621,7 +630,7 @@ def _delete_one(self,key,tag):
621
630
if roles :
622
631
for role in roles :
623
632
if role == "OWNER" :
624
- if request .user :
633
+ if hasattr ( request , "user" ) and request .user :
625
634
if user_id_field :
626
635
if obj .to_dict ().get (user_id_field )== request .user .id :
627
636
permission_check_ok = True
0 commit comments