Google App Engine用フレームワークKayのRESTfull APIの機能(RESTViewGroup)でアクセス制限を行う方法。
Google App Engine用フレームワークKayには、RESTfull APIを簡単に実装するための「RESTViewGroup」という機能が用意されています。
このRESTViewGroupの機能で特定の処理に対してアクセス制限を行う方法を説明します。
RESTViewGroupのauthorizeメソッドをオーバーライドすることで、アクセス制限を行うことが出来ます。
authorizeメソッドは引数に、self・request・operation・obj・model_name・prop_nameをとります。
from kay.generics import (OP_LIST, OP_SHOW, OP_CREATE, OP_UPDATE, OP_DELETE)
from kay.exceptions import NotAuthorized
class MyRESTViewGroup(RESTViewGroup):
models = ['myapp.models.MyModel']
def authorize(self, request, operation, obj=None, model_name=None,
prop_name=None):
'''アクセス制限
@param request: リクエスト
@param operation: 処理(OP_LIST, OP_SHOW, OP_CREATE, OP_UPDATE, OP_DELETE)
@param obj: 処理対象のオブジェクト(OP_SHOW, OP_UPDATE, OP_DELETEのときのみ)
@param model_name: モデル名
@param prop_name:
@raise e: アクセスを許可しないときは kay.exceptions.NotAuthorized を投げる
'''
return True
例:管理者権限がないときはアクセスを許可しない
def authorize(self, request, operation, obj=None, model_name=None,
prop_name=None):
#管理者権限がないときはアクセスを許可しない
if not request.user.is_admin:
raise NotAuthorized
return True
例:ログインしていないないときはアクセスを許可しない
def authorize(self, request, operation, obj=None, model_name=None,
prop_name=None):
#ログインしていないないときはアクセスを許可しない
if request.user.is_anonymous():
raise NotAuthorized
return True
例:変更処理(OP_CREATE, OP_UPDATE, OP_DELETE)は管理者権限を必要とする
def authorize(self, request, operation, obj=None, model_name=None,
prop_name=None):
#変更処理(OP_CREATE, OP_UPDATE, OP_DELETE)は管理者権限を必要とする
if operation in (OP_CREATE, OP_UPDATE, OP_DELETE):
if not request.user.is_admin:
raise NotAuthorized
return True
Pingback: Google App Engine用フレームワークKayのRESTfull APIの機能(RESTViewGroup)でアクセス制限を行う方法 その2 « 山本隆の開発日誌