2017-07-14 48 views
0

我想在flask-admin中區分可訪問性和視圖(索引,創建,編輯)。它可以通過覆蓋以下方法在關於特定模型的所有視圖級別完成:is_accessible。Flask-admin:區分視圖之間的可訪問性

def is_accessible(self): 
    return current_user.is_authenticated # using flask-login 

我需要某些用戶能夠瀏覽數據,但沒有權限創建新記錄。其他用戶應該能夠創建 並編輯記錄。任何幫助將不勝感激。

我已重寫_handle_view方法,其每一個視圖之前調用。

def _handle_view(self, name, **kwargs): 
    if not current_user.is_authenticated: 
     return self.unauthorized_access() 

    permissions = self.get_permissions(name) 
    if not current_user.can(permissions): 
     return self.forbidden_access() 

    return None #access granted 

回答

0

Flask-User看起來像你想要的。您指定了一個UserRoles類,一個Roles類和User類,您已擁有該類。您將UserRole分配給User,然後在您的is_accessible方法中根據您的角色區分您想要執行的操作(讀取/寫入/編輯)。

https://pythonhosted.org/Flask-User/

# Define User model 
class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(50), nullable=True, unique=True) 
    ... 
    roles = db.relationship('Role', secondary='user_roles', 
      backref=db.backref('users', lazy='dynamic')) 

# Define Role model 
class Role(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(50), unique=True) 

# Define UserRoles model 
class UserRoles(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE')) 
    role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE')) 
1

這是不是非常有據可查的,但我認爲你可以覆蓋模型視圖類is_action_allowed方法來得到你想要的行爲。 API文檔並沒有說太多關於這一點,但我發現從changenotes一個更好的例子,當它被介紹:

您可以控制哪些操作可供當前請求通過 覆蓋is_action_allowed方法:

from flask.ext.admin.actions import action 

class MyModelAdmin(ModelAdmin): 
    def is_action_allowed(self, name): 
     if name == 'merge' and not user.superadmin: 
      return False 

     if name == 'delete' and not user.admin: 
      return False 

     return super(MyModelAdmin, self).is_action_allowed(name) 

我還沒有嘗試過這個我自己,所以我不能證實這個例子是否真的沒有其他變化。

相關問題