2013-06-10 3 views
1

참고 : 도움이된다면 피라미드 1.3.2를 사용하고 있습니다. 조금 오래되었다는 것을 알고 있습니다. 즉시 업데이트하지 않기를 원하지만, 최신 버전이이 사용 사례에 대한 더 나은 지원을 제공한다면 업데이트를 강제 할 수 있습니다. 모든 전화 인증해야합니다가끔 피라미드 미들웨어를 사용 중지 할 때

내가 일하고 있어요 피라미드 기반 응용 프로그램은 엄격한 권한 부여 정책을 가지고 있습니다. 1) 이후 모든 요청 handelr 수동으로 추가하는 지루한; 2) 다른 사람이 인증 추가를 "잊어 버리는"것을 원하지 않으면 모든 들어오는 요청을 확인하는 간단한 피라미드 미들웨어 (트윈)를 사용하여이 서버 전체를 강화합니다.

최근이 제한 사항은 다소 완화되었습니다. 때때로 일부 리소스는 인증없이 GET (안전 & 멱등 원)을 지원해야합니다.

이것은 대부분의 웹 프레임 워크 (선택 인증)의 인증 뒤에있는 일반적인 디자인 아이디어와 직접적으로 반대되는 것으로 보이므로 예상대로 작동하지는 않습니다.

질문 : &는 기본적으로 인증을 확인 인증,하지만보기별로보기으로 사용할 수있는 권한 미들웨어를 구현하는 올바른 방법은 무엇입니까? ,

def authorization_middleware(handler, registry): 
    def verify_authorization(request): 
    # Identify the user making the request. Make sure we get the 
    # user's identify if provided, even when the request handler 
    # allows anonymous access. 
    try: 
     request.principal = extract_user(request) 
    except InvalidCredentials, error: 
     if getattr(handler, 'allows_anonymous_access', False): 
     request.principal = AnonymousUser() 
     else: 
     raise HTTPUnauthorized(...) 
    # Invoke the handler. 
    return handler(request) 
    # Middleware that will pre/post-process the request. 
    return authorization_middleware 

그러나 내 미들웨어에서

def allows_anonymous_access(f): 
    f.allows_anonymous_access = True; return f 

@allows_anonymous_access 
def my_pyramid_view(request): 
    # ... 

, 나는이처럼 사용하고 싶습니다 :


지금까지, 정말 같은 간단한 장식을 추가하는 시도했습니다 미들웨어가 실행될 때 handler이 내보기가 아닙니다. 그것은 나를 호출 할 수있는 뷰에 대한 액세스를 제공하지 않는 바운드 메서드 ( pyramid.router.Router.handle_request) 일 수 있습니다. 즉, 미들웨어에서 설정된 플래그에 액세스 할 수 없습니다.

+0

피라미드에는 자체 인증 시스템이 있습니다.나 자신의 글을 쓰기보다는 그것을 사용하려고하는 것이 좋습니다. 당신이 요구 한 것은 프레임 워크 내부에서 매우 간단합니다.이 질문에 붙여 넣은 것보다 적은 코드 일 것입니다. Piotr이 제공 한 답은 맞지만 ACL 및 authn/authz 정책을 구성하지 않으면 사용하기가 어렵습니다. 여기에 몇 가지 다른 질문이 있습니다. –

답변

0

아마도 pyramid.config.set_default_permission(permission)이 필요합니다. docs에서 : 응용 프로그램 정책이 특정 뷰에 대한 몇 가지 예외를 요구하지 않는

기본 권한을 추가, 명시 적 허가를 각보기 구성을 보호하는 것이 필요합니다.

기본 권한이 적용되는 경우, 에 의미 뷰 구성이 진정으로 익명으로 접근보기 (심지어 예외보기 뷰) pyramid.security.NO_PERMISSION_REQUIRED으로 수입 할 수있는 권한의 값을 사용해야합니다을 만들 수 있습니다. 이 문자열을보기 구성에 permission으로 사용하면 기본 사용 권한은 이며보기가 등록되어 모든 발신자에게 자격 증명에 관계없이 사용할 수 있습니다. 의해 제공

답변 #pyramid Freenode의 IRC 채널을 raydeo_.

관련 문제