def decorate(action): def f(*a, **b): if auth.user is not None: res = None try: from gluon.contrib.simplejsonrpc import ServerProxy url = settings.rpc_server + "/cba/admin/call/jsonrpc" service = ServerProxy(url) res = service.check_permission(request.application, request.controller, request.function, auth.user.token) except: # print auth.user.token # import traceback # traceback.print_exc() pass finally: if res and "result" in res and res["result"] is True: auth.user.permissions = res["permissions"] return action(*a, **b) if request.is_restful: raise HTTP(401) else: #session.flash = "Bạn không có quyền truy cập!" if not "message" in res else res["message"] redirect(URL(c='default', f='index')) f.__doc__ = action.__doc__ f.__name__ = action.__name__ f.__dict__.update(action.__dict__) return f return decorate auth.requires_authorize = __authorize