2011-12-30 4 views
4

저는 web2py를 처음 사용합니다. 하나의 관리자 (수퍼 유저) 계정을 가진 응용 프로그램을 만들고 싶습니다. 나는 '오직 관리자 만이 사용자를 등록 할 수 있습니다'를 제한하고 싶습니다. 따라서 관리자가 앱에 로그인하면 '홈', '설정'및 '사용자 등록'과 같은 다른 메뉴가 표시됩니다. 다른 옵션으로 끝났지 만 '사용자 등록'에서 문제가 발생합니다.맞춤형 web2py 등록

내 신청서에 'Register'링크가 있습니다. – http://127.0.0.1:8000/filemanager2/default/user/register. 그러나 그것을 클릭하면 이 프로필 페이지로 리디렉션됩니다. 관리자가 이미 에 로그인 했으므로 등록 링크를 클릭하면 관리자 계정의 프로필이 표시됩니다. 이 문제를 해결하려면 어떻게해야합니까? 당신이 내장 된 인증 레지스터() 함수를 활용하고자하는 경우에는 다음과 같이

답변

6

, 당신은 그것을 조금 해킹 할 수

@auth.requires_membership('admin') 
def register() 
    admin_auth = session.auth 
    auth.is_logged_in = lambda: False 
    def post_register(form): 
     session.auth = admin_auth 
     auth.user = session.auth.user 
    auth.settings.register_onaccept = post_register 
    return dict(form=auth.register()) 

일반적으로 Auth.register() 검사 사용자가 로그인 한 경우 프로필 페이지로 리디렉션됩니다. 위의 예는 auth.is_logged_in() 메소드를 False를 반환하는 람다로 대체하므로 리디렉션이 발생하지 않습니다. 또한 Auth.register()는 session.auth 및 auth.user를 새로 등록 된 사용자와 관련된 값으로 설정하므로 위 코드는 admin의 값을 저장하고 register_onaccept 콜백을 사용하여 session.auth 및 auth.user를 관리자의 값으로 복원합니다. 당신이이긴 경우에, 그러나

@auth.requires_membership('admin') 
def register(): 
    form = SQLFORM(db.auth_user) 
    if form.validate(): 
     admin_user = auth.user 
     auth.get_or_create_user(form.vars) 
     auth.user = admin_user 
    return dict(form=form) 

:

또 다른 방법은 단순히 db.auth_user 테이블을 기반으로 자신의 등록 양식을 작성하고 새 사용자를 추가 할 Auth.get_or_create_user() 메소드를 사용하는 것입니다 내장 register() 함수가 자동으로 등록 양식에 추가하는 암호 확인 필드를 가져 오지 못합니다. 내장 된 register() 메소드와 마찬가지로 get_or_create_user()는 auth.user를 새 사용자의 레코드로 설정하기 때문에 삽입 후에 admin 사용자의 레코드로 다시 설정해야합니다.

위의 두 방법 모두 auth.settings.create_user_groups가 True (기본값) 인 경우 새 사용자에 대해 새로운 고유 Auth 그룹을 자동으로 만들고 해당 그룹에 사용자를 할당합니다. 위의 방법 대신 표준 SQLFORM을 사용하여 새 사용자를 추가 할 수 있지만 수동으로 그룹을 만들고 추가해야합니다.

이 옵션을 쉽게 추가해야합니다.

+0

정말 고마워요. –

+0

질문과 답변 모두에게 감사드립니다. –