2017-02-24 51 views
0

這裏是索引,非常簡單。使用web2py的網格/ 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通常是布爾值,但它們 可以是採取行對象功能,並決定是否 顯示相應的按鈕或沒有噸。

+0

完美,歡呼聲。 –

相關問題