2014-07-15 2 views
0

Flask-Admin과 함께 플라스크 앱을 사용하여 /admin/userview modelview의 사용자를 관리 할 수 ​​있습니다. 올바른 그룹을 가진 DB에있는 사용자가 /admin/userview으로 이동할 때 페이지를 표시하고 싶지 않은 경우 일반 텍스트 "not admin"을 반환하고 싶습니다. 다행히도 나는 마지막 부분을 가지고 있지만, 불행히도 첫 번째 부분을 얻는 것처럼 보이지 않는다. (올바른 그룹에있는 페이지를 계속해서 보여줄 수는있다.) 여기Flask-Admin modelview 기능

class MyView(ModelView): 
    @expose('/', methods = ['GET', 'POST']) 
    def index(self): 
    ## grab kerberos username (PROD) 
     secuser = request.environ.get('REMOTE_USER') 

     adminresult = User.query.filter_by(usrlevel='admin').all() 
     adminresult = str(adminresult) 
     adminresult = adminresult.strip('[]') 

     managerresult = User.query.filter_by(usrlevel='manager').all() 
     managerresult = str(managerresult) 
     managerresult = managerresult.strip('[]')  

     if secuser in adminresult: 
      pass   <---------------\ 
     elif secuser in managerresult: |- if a user is apart of either, this gives a ValueError 
      pass   <---------------/ 
     else: 
      return "NOT ADMIN" <--------- This works! 

##ADMIN 
admin = Admin(flaskapp, index_view=MyHomeView(), name="test APP") 
admin.add_view(MyView(User, db.session, "Edit Users")) 

나는 사용자가 adminresult 또는 managerresult에있을 때 얻을 추적 것 : 여기에 관련 코드가있어 나는 ModelView "사용자"를 얻는 방법

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request 
    response = self.make_response(rv) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1566, in make_response 
    raise ValueError('View function did not return a response') 
ValueError: View function did not return a response 

이 경우이 내용의 표시 사용자가 어느 그룹에 있으며, 그렇지 않은 경우 "관리자가 아닌"텍스트를 반환합니다. 나는 그 중 절반이 끝난 것 같아요. 계속해서 문제가되는 것 같아요.

고마워요!

답변

1

당신은 실제로 is_accessible에 체크를 넣어해야합니다

class MyView(ModelView): 
    def is_accessible(self): 
     # grab kerberos username (PROD) 
     secuser = request.environ.get('REMOTE_USER') 

     admins_and_managers = User.query 
            .filter(User.usrlevel.in_('admin', 'manager')) 
            # Better yet, filter again on `secuser` 
            # to avoid loading *every* admin and manager 
            # on *every* request for this resource 
            # and then use `.first` or `.one` 
            .all() 

     return secuser in admins_and_managers 
+0

이 secuser'가 있었다'있는지를 얻을 서식 문자열을해야했다 나는 일 동안이 작업을 봤는데, 정말 감사합니다. ! 너 한테 맥주 빚 졌어. – asdfgthereisnocowlevel

+0

문자열 형식화를해야한다면'User'의'__str__' 메쏘드에 의존하고있을 것입니다 - 장기적으로 좋은 생각은 아닙니다. 적절한 필드에 실제로 필터링하는 것이 더 낫습니다 ('User___ str__' 또는'User .__ repr__'에서 사용되는 필드의 이름 인'username_'이'filter_by (username = secuser)'를 추가하십시오). '.all' 대신'.first'를 사용하고'admins_and_managers is not None'으로 체크를 변경하십시오) –