Flask-Admin基于角色的资源权限

时间:2015-07-27 19:55:29

标签: flask wtforms flask-admin flask-security flask-principal

我正在创建一个Flask-Admin应用,需要检查View,Edit&删除表格中的某些行。

即,我想:

  • 仅列出用户ID与行的所有者ID匹配的行
  • 如果用户具有某个角色,则让用户创建一行
  • 如果用户具有某个角色,则只允许用户编辑一行

我可以考虑重写方法query(),on_model_change()等来检查编辑许可,但是:

  • 用户仍然可以通过更改URL来显示“编辑”屏幕
  • 来查看该行
  • 我不知道如何将WTForms一对多编辑列表限制为仅允许的项目

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:3)

解决我自己问题的快速而肮脏的解决方案:

1。创建一个通用函数来检查ModelView类中的所有权

private String visit(String word) {
    int count = 0;
    if(word == ""){
        return "<empty>";
    }
    //alphabet is an array that holds all characters that could be used in the String
    for(int i = 0; i < alphabet.length; i++){  
        for(int j = 0; j < word.length(); j++){

            if(alphabet[i] == word.charAt(j)){
                count++;
            }
            if(count == 2){                 
                return "";                                              
            }
        }
        count = 0;
    }           
    return word;        
}

2。覆盖ModelView的on_model_change,on_form_prefill,on_model_delete,get_query和get_count_query方法以检查所有权(user_id = current_user.id):

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