私の答えは、flask プリンシパルがどのように機能するか、およびそれがデータベースとどのように統合されるかを既に知っているという前提に基づいています。
まず、ニーズをデータベースに保存するだけで済みます。理由がわからない場合は、以下の私の回答を読むことはお勧めしません
それでは、質問に戻りますが、記事を編集する必要があります。
@app.route('/article/edit/<id>'):
@Permission(Need('edit', 'article')).require()
def article(id):
pass
ユーザーの身元
id = identity(user.id)
id.provide.add(Need('edit','article'))
次に、ユーザーは記事を編集する権限を持ちます。@Permission(Need('edit', 'article')).require()
ユーザーが記事の作成者でなくても、すべての記事に対して true を返します。これはあなたの問題ですよね??
以下は、私がこの問題を解決する方法です
デフォルトの Permission.require() は に渡す引数を提供しないため、独自の Permisson と IdentityContext を定義し、記事 ID と記事モデルを渡します。次に、記事の user_id をフラスコ ログインの current_user.id でチェックします。
class MyPermission(Permission):
pass
class MyIdentityContext():
pass
ユーザーが記事の作成者である場合は True を返し、ユーザーは記事を編集できます。そうでない場合は False を返します。
--------詳細は後ほど更新します------------