跟进这个问题Flask-Admin Role Based Access - 根据角色修改访问权限我不明白如何实现基于角色的视图,特别是关于表单和列列表。
说我想要MyModelView
如果用户是普通用户或超级用户,则显示不同的列。
覆盖is_accessible
in MyModelView
完全没有效果
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
错误按照current_user.is_authenticated() 上的 AttributeError)。在 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]
FYI, SafeModelView
可以是任何继承自的类dgBaseView
在前面提到的问题中。