Flask Admin - 限制自己用户内容的 CRUD 功能

Flask Admin - Restrict CRUD functions for own user content

我想知道是否有人成功限制了 flask admin 的 CRUD 功能。或者这是否是正确的工具。

我想做的是以某种方式转换 ModelView,以便用户只能编辑自己的内容。示例:数据库 table "restaurant menu" 包含不同餐厅提供的菜肴。如果餐厅希望更改某些内容,他们应该能够更改和查看自己的内容,但不能更改和查看其他餐厅的内容。理想情况下,sqlalchemy 有一个简单的方法——我首先查询一个 "User" 模型并获取与用户相关的餐厅,然后将其传递给 ModelView class。

做这样的事情是否有一个简单的实现,或者是否有其他 CMS 系统可以更容易地处理这样的功能?

所以,我更深入地浏览了源代码。非常感谢 gittert 的帮助。

请注意,在我的解决方案中,我确实想限制一个特定列的查看和编辑功能,该列也是来自不同 table 的外键。

因此,为了限制视图功能,我确实重写了 get_query() 和 get_count_query(),因为它已发布在之前的帖子中:

##  overwrite
def get_query(self):
    self._auto_fush_deactivate()
    return super(CustomView, 
self).get_query().filter(User.id== 1)

def get_count_query(self):
    return self.session.query(func.count('*')).filter(User.id == 1)

并且为了让用户只能使用他在 table 中的 OWN 外键添加新数据,我另外重写了 on_model_create() 函数。

def on_model_change(self, form, model, is_created):

    ### deactivate auto_flush temp. to not receive data integrity error
    self._auto_fush_deactivate()
    ### create model from table user
    overwrite_model = self.session.query(User).filter(User.id== 1).first()

    ### overwrite the user id with model from User-Model
    model.user_id =  overwrite_model
    self._auto_fush_activate()

def _auto_fush_deactivate(self):
    self.session.autoflush = False

def _auto_fush_activate(self):
    self.session.autoflush = True