참고 : 도움이된다면 피라미드 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
) 일 수 있습니다. 즉, 미들웨어에서 설정된 플래그에 액세스 할 수 없습니다.
피라미드에는 자체 인증 시스템이 있습니다.나 자신의 글을 쓰기보다는 그것을 사용하려고하는 것이 좋습니다. 당신이 요구 한 것은 프레임 워크 내부에서 매우 간단합니다.이 질문에 붙여 넣은 것보다 적은 코드 일 것입니다. Piotr이 제공 한 답은 맞지만 ACL 및 authn/authz 정책을 구성하지 않으면 사용하기가 어렵습니다. 여기에 몇 가지 다른 질문이 있습니다. –