我想知道是否有人成功限制了flask admin的CRUD功能。或者,如果这根本是正确的工具。
我想做的是以某种方式转换ModelView,以便用户只能编辑自己的内容。示例:数据库表“餐厅菜单”包含不同餐厅提供的菜肴。如果一家餐厅希望更改某些内容,则他们应该能够更改并查看自己的内容,但不能更改其他餐厅的内容。理想情况下,使用sqlalchemy有一种简单的方法-我首先查询“用户”模型并获取与用户相关联的餐厅,然后将其传递给ModelView类。
做这样的事情是否容易实现?是否有其他CMS系统可以更轻松地处理这种功能?
答案 0 :(得分:0)
因此,我更深入地研究了源代码。非常感谢gittert的帮助。
请注意,在我的解决方案中,我确实希望限制某一列的“查看和编辑”功能,这也是来自不同表的外键。
因此,为了限制视图功能,我确实重写了先前文章中发布的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)
为了使用户只能使用表中的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