Google App Engine用フレームワークKayのRESTfull APIの機能(RESTViewGroup)でアクセス制限を行う方法

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

コメント

  1. Pingback: Google App Engine用フレームワークKayのRESTfull APIの機能(RESTViewGroup)でアクセス制限を行う方法 その2 « 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください