2017-12-01 9 views
0

Flask-Admin을 처음 사용하고 앱에 구현할 수있었습니다. 모든 것이 잘 작동합니다. 관리보기가 설정되고 데이터를 표시하고 만들고 삭제할 수 있습니다.맞춤 보안 기능이있는 Flask-Admin

보안 옵션을 찾을 때 내 자신을 굴릴 수 있음을 알았습니다. 하지만 그것은 클래스 기반의보기 예제를 보여 주며 (광산은 함수 기반 임) Flask-Login을 사용해야합니다. 나는 그것을 사용하고 싶지 않다. 이미 다음과 같은 필요한 경로에 대한 권한 확인이 있습니다.

def login_required(something): 
    @wraps(something) 
    def wrap(*args, **kwargs): 
     if 'logged_in' in session: 
      return test(*args, **kwargs) 
     else: 
      return redirect(url_for('main.login')) 

    return wrap 


@main_blueprint.route('/') 
@login_required 
def index(): 
    form = MessageForm(request.form) 
    return render_template('index.html', form=form) 


@main_blueprint.route('/login', methods=['GET', 'POST']) 
def login(): 
    error = None 
    form = LoginForm(request.form) 

    if request.method == 'POST': 
     if form.validate_on_submit(): 
      user = User.query.filter_by(name=request.form['name']).first() 
      if user is not None and bcrypt.check_password_hash(user.password, request.form['password']): 
       session['logged_in'] = True 
       session['user_id'] = user.id 
       session['role'] = user.role 
       session['user'] = user.name 
       flash('Welcome') 

       return redirect(url_for('main.index')) 
      else: 
       error = 'Invalid Username or Password.' 
       flash('Invalid Username/Password Combination') 
    return render_template('login.html', form=form, error=error) 

나는

@main_blueprint.route('/admin') 
@login_required 
def admin(): 
    return render_template('admin/master.html') 

하지만 분명이 작동하지 않습니다 다음을 수행 할 시도했습니다.

Flask-Login 또는 Flask-Security 또는 다른 추가 모듈을 사용하지 않고 Flask-Admin 경로에 자체 보안을 구현하는 방법은 무엇입니까 ??

답변

0

내 대답을 찾은 것 같습니다. https://danidee10.github.io/2016/11/14/flask-by-example-7.html의 도움으로 앱에 구현할 수있었습니다.

admin = Admin(app, name='Dashboard', index_view=AdminView(User, db.session, url='/admin', endpoint='admin')) 
:

class AdminView(sqla.ModelView): 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.static_folder = 'static' 

    def is_accessible(self): 
     return session.get('role') == 'admin' 

    def inaccessible_callback(self, name, **kwargs): 
     if not self.is_accessible(): 
      return redirect(url_for('main.login', next=request.url)) 

과에 admin = Admin(app) 변경