Flask 基于管理员角色的资源权限
我正在创建一个Flask管理应用程序,它需要检查查看、编辑和删除表中某些行的权限 i、 我想:Flask 基于管理员角色的资源权限,flask,wtforms,flask-admin,flask-security,flask-principal,Flask,Wtforms,Flask Admin,Flask Security,Flask Principal,我正在创建一个Flask管理应用程序,它需要检查查看、编辑和删除表中某些行的权限 i、 我想: 仅列出用户ID与行的所有者ID匹配的行 如果用户具有特定角色,则允许用户创建一行 仅当用户具有特定角色时才允许用户编辑行 我可以考虑覆盖方法query()、on_model_change()等来检查编辑许可证,但是: 用户仍然可以通过更改URL以显示编辑屏幕来查看该行 我不知道如何将一对多编辑列表限制为仅允许的项目 我如何才能做到这一点?我自己的问题的快速而肮脏的解决方案: 1。创建一个通用函
- 仅列出用户ID与行的所有者ID匹配的行
- 如果用户具有特定角色,则允许用户创建一行
- 仅当用户具有特定角色时才允许用户编辑行
- 用户仍然可以通过更改URL以显示编辑屏幕来查看该行
- 我不知道如何将一对多编辑列表限制为仅允许的项目
我如何才能做到这一点?我自己的问题的快速而肮脏的解决方案: 1。创建一个通用函数来检查ModelView类中的所有权
def is_owned(self, id):
model = db.session.query(self.model).filter(self.model.id == id).all()
if len(model) == 0:
return False
else:
model = model[0]
if model.user_id == current_user.id:
return True
return False
2.覆盖ModelView的on\u model\u change、on\u form\u prefill、on\u model\u delete、get\u query和get\u count\u query方法以检查所有权(user\u id=current\u user.id):
您见过提供基于角色的访问控制的扩展吗?我不知道Flask RBAC,但我不知道它在解决此问题时如何比Flask Security或Flask Principal具有任何优势。
def on_model_change(self, form, model, is_created):
if not self.is_owned(model.id):
abort(403)
def on_form_prefill(self, form, id):
if not self.is_owned(id):
abort(403)
def on_model_delete(self, model):
if not self.is_owned(model.id):
abort(403)
def get_query(self):
return super(Tables, self).get_query().filter(self.model.user_id == current_user.id)
def get_count_query(self):
return super(Tables,self).get_count_query().filter(self.model.user_id == current_user.id)