@@ -240,6 +240,7 @@ public AbstractVerifier<T> setVisitor(Visitor<T> visitor) { |
240 | 240 | * @return |
241 | 241 | * @throws Exception |
242 | 242 | */ |
| 243 | + @Override |
243 | 244 | public boolean verifyAccess(SQLConfig config) throws Exception { |
244 | 245 | String table = config == null ? null : config.getTable(); |
245 | 246 | if (table == null) { |
@@ -249,7 +250,7 @@ public boolean verifyAccess(SQLConfig config) throws Exception { |
249 | 250 | String role = config.getRole(); |
250 | 251 | if (role == null) { |
251 | 252 | role = UNKNOWN; |
252 | | - } |
| 253 | + } |
253 | 254 | else { |
254 | 255 | if (ROLE_MAP.containsKey(role) == false) { |
255 | 256 | Set<String> NAMES = ROLE_MAP.keySet(); |
@@ -262,14 +263,72 @@ public boolean verifyAccess(SQLConfig config) throws Exception { |
262 | 263 | } |
263 | 264 |
|
264 | 265 | RequestMethod method = config.getMethod(); |
| 266 | + verifyRole(config, table, method, role); |
| 267 | + |
| 268 | + return true; |
| 269 | + } |
| 270 | + |
| 271 | + @Override |
| 272 | + public void verifyRole(SQLConfig config, String table, RequestMethod method, String role) throws Exception { |
| 273 | + verifyAllowRole(config, table, method, role); //验证允许的角色 |
| 274 | + verifyUseRole(config, table, method, role); //验证使用的角色 |
| 275 | + } |
265 | 276 |
|
266 | | - verifyRole(table, method, role);//验证允许的角色 |
| 277 | + /**允许请求使用的所以可能角色 |
| 278 | + * @param config |
| 279 | + * @param table |
| 280 | + * @param method |
| 281 | + * @param role |
| 282 | + * @return |
| 283 | + * @throws Exception |
| 284 | + * @see {@link apijson.JSONObject#KEY_ROLE} |
| 285 | + */ |
| 286 | + public void verifyAllowRole(SQLConfig config, String table, RequestMethod method, String role) throws Exception { |
| 287 | + Log.d(TAG, "verifyAllowRole table = " + table + "; method = " + method + "; role = " + role); |
| 288 | + if (table == null) { |
| 289 | + table = config == null ? null : config.getTable(); |
| 290 | + } |
| 291 | + |
| 292 | + if (table != null) { |
| 293 | + if (method == null) { |
| 294 | + method = config == null ? GET : config.getMethod(); |
| 295 | + } |
| 296 | + if (role == null) { |
| 297 | + role = config == null ? UNKNOWN : config.getRole(); |
| 298 | + } |
| 299 | + |
| 300 | + Map<RequestMethod, String[]> map = ACCESS_MAP.get(table); |
267 | 301 |
|
| 302 | + if (map == null || Arrays.asList(map.get(method)).contains(role) == false) { |
| 303 | + throw new IllegalAccessException(table + " 不允许 " + role + " 用户的 " + method.name() + " 请求!"); |
| 304 | + } |
| 305 | + } |
| 306 | + } |
268 | 307 |
|
| 308 | + /**校验请求使用的角色,角色不好判断,让访问者发过来角色名,OWNER,CONTACT,ADMIN等 |
| 309 | + * @param config |
| 310 | + * @param table |
| 311 | + * @param method |
| 312 | + * @param role |
| 313 | + * @return |
| 314 | + * @throws Exception |
| 315 | + * @see {@link apijson.JSONObject#KEY_ROLE} |
| 316 | + */ |
| 317 | + public void verifyUseRole(SQLConfig config, String table, RequestMethod method, String role) throws Exception { |
| 318 | + Log.d(TAG, "verifyUseRole table = " + table + "; method = " + method + "; role = " + role); |
269 | 319 | //验证角色,假定真实强制匹配<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
270 | 320 |
|
271 | 321 | String visitorIdKey = getVisitorIdKey(config); |
272 | | - |
| 322 | + if (table == null) { |
| 323 | + table = config == null ? null : config.getTable(); |
| 324 | + } |
| 325 | + if (method == null) { |
| 326 | + method = config == null ? GET : config.getMethod(); |
| 327 | + } |
| 328 | + if (role == null) { |
| 329 | + role = config == null ? UNKNOWN : config.getRole(); |
| 330 | + } |
| 331 | + |
273 | 332 | Object requestId; |
274 | 333 | switch (role) { |
275 | 334 | case LOGIN://verifyRole通过就行 |
@@ -366,39 +425,6 @@ public boolean verifyAccess(SQLConfig config) throws Exception { |
366 | 425 | } |
367 | 426 |
|
368 | 427 | //验证角色,假定真实强制匹配>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
369 | | - |
370 | | - |
371 | | - return true; |
372 | | - } |
373 | | - |
374 | | - |
375 | | - |
376 | | - |
377 | | - |
378 | | - /**允许请求,角色不好判断,让访问者发过来角色名,OWNER,CONTACT,ADMIN等 |
379 | | - * @param table |
380 | | - * @param method |
381 | | - * @param role |
382 | | - * @return |
383 | | - * @throws Exception |
384 | | - * @see {@link apijson.JSONObject#KEY_ROLE} |
385 | | - */ |
386 | | - public void verifyRole(String table, RequestMethod method, String role) throws Exception { |
387 | | - Log.d(TAG, "verifyRole table = " + table + "; method = " + method + "; role = " + role); |
388 | | - if (table != null) { |
389 | | - if (method == null) { |
390 | | - method = GET; |
391 | | - } |
392 | | - if (role == null) { |
393 | | - role = UNKNOWN; |
394 | | - } |
395 | | - |
396 | | - Map<RequestMethod, String[]> map = ACCESS_MAP.get(table); |
397 | | - |
398 | | - if (map == null || Arrays.asList(map.get(method)).contains(role) == false) { |
399 | | - throw new IllegalAccessException(table + " 不允许 " + role + " 用户的 " + method.name() + " 请求!"); |
400 | | - } |
401 | | - } |
402 | 428 | } |
403 | 429 |
|
404 | 430 |
|
|