【发布时间】:2018-05-07 08:23:34
【问题描述】:
跟进这个问题Flask-Admin Role Based Access - Modify access based on role 我不明白如何实现基于角色的视图,尤其是关于表单和列列表。
假设如果用户是普通用户或超级用户,我希望 MyModelView 显示不同的列。
在MyModelView 中覆盖is_accessible 完全没有效果
from flask_security import Security, SQLAlchemyUserDatastore, current_user
class MyModelView(SafeModelView):
# ...
def is_accessible(self):
if current_user.has_role('superuser'):
self.column_list = superuser_colum_list
self.form_columns = superuser_form_columns
else:
self.column_list = user_colum_list
self.form_columns = user_form_columns
return super(MyModelView, self).is_accessible()
# Has same effect as
def is_accessible(self):
return super(MyModelView, self).is_accessible()
并且定义条件类属性也不起作用,因为未定义 current_user(NoneType 错误,根据 AttributeError on current_user.is_authenticated())。在 ModelView 的 __init__ 中做同样的事情,current_user 仍然没有定义
class MyModelView(SafeModelView):
#[stuff]
if current_user.has_role('superuser'):
column_list = superuser_colum_list
form_columns = superuser_form_columns
else:
column_list = user_colum_list
form_columns = user_form_columns
#[other stuff]
仅供参考,SafeModelView 可以是从上述问题中的dgBaseView 继承的任何类。
【问题讨论】:
-
为什么没有定义current_user?你没有使用flask_login吗?
-
不是直接登录烧瓶,用导入更新帖子
-
current_user 在请求之外不存在 (stackoverflow.com/questions/12710036/…)
标签: python flask flask-admin