刚刚使用flaskadmin和CRUD进行关系对于管理视图非常有用,但我需要的是受限制的用户视图。是否可以创建用户视图,因此登录用户只能看到他的数据,而不能看到用户的数据? (也不是其他用户)
我正在寻找一种向每个dbsession查询添加"WHERE id = 1"
之类的方法。
感谢您的帮助! MS
我的代码如下所示:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://xx:xyz@localhost/db'
db = SQLAlchemy(app)
admin = Admin(app, template_mode='bootstrap3')
class Users(Base):
__tablename__ = 'users' # portal user
id = db.Column(Integer, primary_key=True)
email = db.Column(String(255), nullable=False)
password = db.Column(String(255), nullable=False)
active = db.Column(Boolean, nullable=False)
data = db.relationship("Data", back_populates="users")
def __repr__(self):
return '%s' % (self.email)
class UsersView(ModelView):
form_excluded_columns = ['active']
class Data(Base):
__tablename__ = 'data'
id = db.Column(Integer, primary_key=True)
user_id = db.Column(Integer, ForeignKey('user.id'), nullable=False)
user_email = db.relationship("Users", back_populates="email")
somesecrets = db.Column(String(255), nullable=False)
admin.add_view(UsersView(Users, db.session))
admin.add_view(ModelView(Data, db.session))
答案 0 :(得分:0)
您需要覆盖get_query_count
课程的get_query
和ModelView
方法。
例如:
class DataView(ModelView):
def get_query(self):
current_user_id = get_current_user_id()
return self.session.query(self.model).filter(Data.user_id == current_user_id)
def get_count_query(self):
current_user_id = get_current_user_id()
return self.session.query(func.count('*')).select_from(self.model).filter(Data.user_id == current_user_id)
...
admin.add_view(UsersView(Users, db.session))
admin.add_view(DataView(Data, db.session))
如果您使用Flask-Security或Flask-Login之类的内容,则可以轻松获取当前登录的用户。