2014-07-14 9 views
0

플라스크 응용 프로그램에 대해 하나의 파일 views.py이 있습니다.Flask-Admin에서 하나의보기를 제한 하시겠습니까?

db = SQLAlchemy(flaskapp) 

def build_db(): 

import random 
import datetime 

db.drop_all() 
db.create_all() 

# Create sample Users 
testuser = [] 
testgroup = [] 
testlevel = [] 

user_list = [] 
for i in range(len(testuser)): 
    user = User() 
    user.testuser = testuser[i] 
    user.testlevel = testlevel[i] 
    user.testgroup = testgroup[i] 

    user_list.append(user) 
    db.session.add(user) 

for user in user_list: 
    entry = random.choice(sample_text) # select text at random 
    post = Post() 
    post.user = user 
    post.title = entry['title'] 
    post.text = entry['content'] 
    tmp = int(1000*random.random()) # random number between 0 and 1000: 
    post.date = datetime.datetime.now() - datetime.timedelta(days=tmp) 
    post.tags = random.sample(tag_list, 2) # select a couple of tags at random 
    db.session.add(post) 

db.session.commit() 
return 

# Create models 
class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    testuser = db.Column(db.String(100)) 
    testgroup = db.Column(db.String(100)) 
    testlevel = db.Column(db.String(100)) 

# Required for administrative interface. For python 3 please use __str__ instead. 
def __repr__(self): 
    return self.testuser 

class UserInfo(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 

    key = db.Column(db.String(64), nullable=False) 
    value = db.Column(db.String(64)) 

    user_id = db.Column(db.Integer(), db.ForeignKey(User.id)) 
    user = db.relationship(User, backref='info') 

def __repr__(self): 
    return '%s - %s' % (self.key, self.value) 

### Attempt at doing something... 
class MyView(ModelView): 
    @expose('/admin/userview', methods=('GET', 'POST')) 
    def adminview(): 
     return "yes" 
##ADMIN 
admin = Admin(flaskapp, name="Test Aptly") 
admin.add_view(MyView(User, db.session)) 

[질문 :

views.py 내부, 나는 Flask-Admin에 대한 설정과 여기에 대응하는 sqlalchemy 데이터베이스를 가지고있다.

사용자의 등급 (데이터베이스 "testlevel"로 정의)에 따라 "/ admin/userview"페이지에 대한 액세스를 차단하는 방법은 무엇입니까? 사용자 3 자질을 가지고, 두 사용자의 예는 다음과 같습니다

어떻게 난 단지 testlevel="admin" 사람들을하자로 관리자 페이지를 제한 할

testuser   testgroup  testlevel 

joe    it    admin 

john    dev    basic 
? 플라스크 보안을 사용합니까? 플라스크 - 교장? 그렇다면 어떻게? 나는 조금씩 둘 다 땜질하고 있었고 나는 지금까지 아무 것도 작동시키지 못했다. 모든 example Flask-Admin

첫째, 당신은 표시 방법되어야 하는지를 구성하는 다양한 클래스 수준의 속성을 사용할 수 있습니다 : 같은

여기 예를 들어 "/ 관리/userview"입니다 보인다. 예를 들어 column_list는 을 사용하여 일부 열을 표시하거나 관련 모델의 추가 열을 포함 할 수 있습니다. 예를를 들어

:

class UserView(ModelView): 
    # Show only name and email columns in list view 
    column_list = ('name', 'email') 

    # Enable search functionality - it will search for terms in 
    # name and email fields 
    column_searchable_list = ('name', 'email') 

    # Add filters for name and email columns 
    column_filters = ('name', 'email') 

또는, 모델 뷰 메소드의 일부를 오버라이드 (override) 할 수 있으며 는 사용자 정의 로직을 구현한다. 당신이 생성 된 폼에 추가 필드에 기여해야하는 경우

예를 들어, 당신은 같은 것을 할 수 있습니다

class UserView(ModelView): 
    def scaffold_form(self): 
     form_class = super(UserView, self).scaffold_form() 
     form_class.extra = wtf.TextField('Extra') 
     return form_class 

확인 flask.ext.admin.contrib.sqlamodel documentation을 구성 프로퍼티와 메소드의 목록. 감사!

답변

0

BaseView을 서브 클래 싱하여 관리 뷰를 작성하고 Flask-login을 사용한다고 가정합니다.

그런 다음 현재 사용자의 품질을 확인하기 위해, 뷰 클래스에 is_accessible 메소드를 오버라이드 (override) :

from flask.ext.admin.base import BaseView 
from flask.ext.login import current_user 

class MyView(BaseView): 
    def is_accessible(self): 
     return current_user.testlevel == 'admin' 

희망이 도움이!

+0

나는 또한 내가 그렇게 같은 이름 얻기 위해 Kerberos를 사용하는 것이 했어야 : '('REMOTE_USER ') 나는 서브 클래스하지 않은 아무것도 'request.environ.get을, 내가 무엇을 게시 내가 사용하는 모든 것을 거기에있다 Flask-Admin/sqlalchemy가 실행되도록하십시오. 나는 Flask-Admin이 웹 페이지 나 그 밖의 것을 유지하는 곳을 모른다./ – asdfgthereisnocowlevel

+0

'request.environ.get ('REMOTE_USER')'이 사용자 이름 (문자열)을 포함하고 있다면, 당신은 당신의 데이터베이스를 질의하여 그의 테스트 레벨을 얻을 수있다. 하위 클래스 화와 관련해서는'Admin' 객체를 생성하고 뷰를 추가해야하는 곳이 있어야합니다 (예 : [here] (http://flask-admin.readthedocs.org/en/latest/quickstart/#adding- views)). 'admin.add_view (...)'에서 어떤 클래스를 사용하고 있습니까? –

+0

그래, 나는 Flask 응용 프로그램에서이 작업을 해왔지만 Flask-Admin을 사용하여 데이터베이스를 쿼리하는 작업을 수행하지 못했습니다. – asdfgthereisnocowlevel