0

基本的に、私はエンティティとして設定した特定のものを彼のビジネスの顧客が購入できるようにするビジネスを持つ顧客用の Web アプリケーションを作成しています。ただし、私の顧客は、アイテムの画像を投稿/アップロードできる特定のページを持ちたいと考えており、以下に基づいています。

Google App Engine - ユーザーが管理者かどうかを調べる

-管理者ログインができないようです。ユーザー モデル オブジェクトを使用して、Google アカウント経由で特定のユーザー ログイン用の特定のページを指定する方法はありますか? したがって、基本的には、顧客用と管理者/ビジネス所有者用の 2 つの異なる python および html ページを作成することを考えていました。特定のログインに応じて、それに応じてルーティングします。私は Google App Engine の比較的初心者で、Python の経験はわずかです。ビジネス オーナーがアプリ エンジン固有のドメイン名を作成し、私は開発者として招待されたので、彼が管理者と見なされていると想定しているので、 https ://developers.google.com/appengine/docs/python/ を使用できると思います。ユーザー/管理者ユーザー

私が確信していないのは、書き込まれたときに特定のエンティティに関連付けられた画像、文字列、ブロブなどが、user.py と admin.py の 2 つの異なるファイルに表示されるかどうかです。そのため、ビジネス オーナーがアイテムを投稿できるようにし、ユーザーが同じアイテムを表示できるようにしたいと考えています。

4

1 に答える 1

0

あなたが説明しているのは基本的に ACL ( Access Control List ) です。これは、ユーザー (人またはプロセス) を一連のアクセス許可 (表示、作成、更新、削除など) に関連付けるためのメカニズムです。

アプリケーション内で、User オブジェクトと一連のアクセス許可の間の関係を格納する新しい ACL モデルを作成できます。各ページ内で、現在のユーザーがそのページで指定されたアクションを実行するための適切な権限を持っていることを確認します (たとえば、現在のユーザーと確認している権限を組み合わせた ACL モデルのインスタンス)。

これは、権限の集合である「ロール」の概念でさらに抽象化できます。たとえば、管理ページを表示し、エンティティを作成または削除する権限を持つ「管理者」ロールを作成できます。「顧客」ロールには、エンティティを表示する機能しかない場合があります。

アプリでこれを使用する方法を示すサンプル コードを次に示します。

class ACL(db.Model):
  user = db.UserProperty()
  permissions = db.ListProperty(str) # there are lots of other ways to store the permissions as well

管理者ユーザーを追加すると、データストアに次のような行が表示されます。

User                  Permissions
admin@example.com     ['ADMIN_VIEWER', 'ADMIN_EDITOR']

管理ページのコード内で、次のことができます。

user = users.get_current_user()
acl = db.GqlQuery("SELECT * FROM ACL WHERE user = :1", user).get()
if 'ADMIN_VIEWER' in acl.permissions:
  # continue
else:
  # unauthorized

多くの検索を行うことが予想される場合は、現在のユーザーの ACL を memcache に入れることができます。

于 2012-07-18T21:30:02.190 に答える