使用web2py的grid / smartgrid限制编辑和删除的最佳方法是仅限发布帖子的用户

时间:2017-02-24 23:34:49

标签: python web2py

这是索引,非常简单。

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

以下是模型,我使用的是基本的auth软件包:

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'))

然而,它不起作用,只是让它无人能编辑任何东西

感谢。

1 个答案:

答案 0 :(得分:2)

auth.has_permission仅在您将权限设置到某处时才有用,您似乎还没有这样做。相反,您应该通过editabledeletable参数传递函数 - 如果允许当前用户编辑行:

True

来自文档:

  

SQLFORM.grid(..., editable=lambda r: r.user_id == auth.user_id) deletableeditable通常是布尔值,但是   可以是获取行对象并决定是否的函数   是否显示相应的按钮。