2017-02-24 3 views
0

ここでは非常に簡単なインデックスです。ここでweb2pyのgrid/smartgridを使用すると、投稿を作成したユーザだけに編集と削除を制限する最も良い方法は何ですか

def index(): 
grid = SQLFORM.smartgrid(db.image, linked_tables=['image']) 
return dict(grid=grid) 

がモデルですが、私は基本的な認証パッケージを使用しています:

db = DAL("sqlite://storage.sqlite") 
import datetime 
from gluon.tools import Auth 
auth = Auth(db) 
auth.define_tables(username=False, signature=False) 

auth.settings.registration_requires_verification = False 
auth.settings.registration_requires_approval = False 
auth.settings.reset_password_requires_verification = True 


db.define_table('image', 
      Field('user_id', 'reference auth_user', default=auth.user_id), 
      Field('post_subject'), 
      Field('post_content', 'text'), 
      Field('created_on', 'datetime', default=datetime.datetime.utcnow()), 
      Field('updated_on', 'datetime', update=datetime.datetime.utcnow()), 
      ) 


db.define_table('post', 
      Field('image_id', 'reference image'), 
      Field('author'), 
      Field('email'), 
      Field('body', 'text')) 



db.image.user_id.readable = db.image.user_id.writable = False 

db.image.post_subject.requires = IS_NOT_EMPTY() 
db.image.post_content.requires = IS_NOT_EMPTY() 

db.image.created_on.writable = False 
db.image.updated_on.writable = False 

私はこれを行うに言う著書からの指示に従ってしようとしました:

grid = SQLFORM.grid(db.auth_user, 
    editable = auth.has_permission('edit','auth_user'), 
    deletable = auth.has_permission('delete','auth_user')) 

しかし、それは動作しません、それだけで誰も何も編集できないように誰も編集できません

ありがとう。

答えて

2

auth.has_permissionは、アクセス権をどこかに設定していないと表示される場合にのみ便利です。代わりに、しかし、あなたはeditabledeletable引数で関数を渡す必要があります - 関数は、テーブルの行を受信すると、現在のユーザーが行を編集することが許可されている場合Trueを返す必要があります:

SQLFORM.grid(..., editable=lambda r: r.user_id == auth.user_id) 

ドキュメントから:

deletableeditabledetailsは通常ブール値であるが、それら 行オブジェクトを取る関数であると決定することができる ディスプレイ対応するボタンにか、または全くt。

+0

完璧な、歓声。 –

関連する問題