flask-admin을 사용할때, 특정 그룹의 사용자 ( admin? ) 가 아니면 admin 페이지에 접근 못하게 막고 싶을 수 있다.
(아니 대부분의 경우 막아야 한다!)
그럴때 사용하면 된다.
class MyAdminIndexView(AdminIndexView):
def is_accessible(self):
#블라블라 허용된 그룹의 사용자인지 판별
# session['id'] 가져와서 판별 등등.
return False
admin = Admin(app, name='flask', template_mode='bootstrap3', index_view = MyAdminIndexView())
바로 is_accessible() 메소드를 오버라이드 하여 막으면 된다.
근데 이 코드는 문제가 있다. 딱 index 페이지만 막힌 모습이다. model 별 url을 입력하면 통과해서 확인 가능하다.
이럴때는 ModelView를 추가할때, 동일하게 is_accessible() 메소드를 오버라이드 해주면 처리할 수 있다.
class MyModelView(ModelView):
def is_accessible(self):
#블라블라 허용된 그룹의 사용자인지 판별
# session['id'] 가져와서 판별 등등.
return False
column_display_pk = True
def __init__(self, cls, session, **kwargs):
super(MyModelView, self).__init__(cls, session, **kwargs)
admin = Admin(app, name='flask', template_mode='bootstrap3', index_view = MyAdminIndexView())
admin.add_view(MyModelView(TestTable, db.session))
이는 is_accessible() 메소드가 다음과 같은 class diagram에서 최상위 클래스인 'BaseView'에 있기 때문이다.
그래서 Index용과 그 외 ModelView용 페이지 인가 제어 ( 이 부분도 일반화되어 교체 가능하게 해도 되고 )
ModelView 클래스를 만들고, 모든 model view 만들때 상속시켜주면 이제 진짜 인가된 사용자 그룹만
허용 시킬 수 있게 된다.
'프로그래밍 > Python' 카테고리의 다른 글
flask-admin 에서 pk, fk 등이 보이지 않고, 수정, 추가 안될때 해결 방법 (0) | 2023.05.01 |
---|---|
lof (0) | 2019.08.26 |
ball tree (0) | 2019.08.01 |
kd tree (1) | 2019.07.04 |
keras를 활용한 다중선형회귀분석 (2) | 2019.05.30 |