문제

미들웨어가 이미지 ID ( "/image/152/")와 같은 값이 URL에 있는지 확인하고, 현재 사용자가 해당 이미지를 볼 수있는 권한이 있는지 확인하기 위해 약간의 검사를 수행 할 수 있습니다. 다른 URL로 리디렉션하지 않으면?

내가 작업중 인이 사이트에 대한 내 자신의 권한을 굴려야했고 동일한 코드로 전체 사이트에 쓰는 거의 모든 견해를 막고 싶지 않기 때문에 미들웨어가 이것에 대한 좋은 아이디어라고 생각했습니다. 그러나 나는 그것을 어떻게 해야할지 잘 모르겠습니다.

도움이 되었습니까?

해결책

예, 가능합니다. 장고 Process_Request 용 미들웨어 문서 그것을 표시합니다 :

def process_request (self, request)

요청은 httprequest 객체입니다. 이 방법은 Django가 실행할 뷰를 결정하기 전에 각 요청에서 호출됩니다.

Process_Request ()는 아무것도 또는 httpresponse 객체를 반환해야합니다. 아무것도 반환하지 않으면 Django는이 요청을 계속 처리하고 다른 미들웨어를 실행하고 적절한 견해를 실행합니다. HTTPresponse 객체를 반환하는 경우 Django는 다른 요청,보기 또는 예외 미들웨어 또는 적절한보기를 호출하지 않습니다. 그 httpresponse를 반환합니다.

그만큼 HttpRequest 물체에는 a가 있습니다 path 요청 된 URL을 제공하는 속성.

그러나 선호하는 경우, 인증 백엔드를 위해 Django의 시스템을 확장하여 손으로 구정 된 권한 체계와 같은 임의의 기준에 따라 권한으로 사용자를 채우기 위해 사용자를 채울 수 있습니다. 이렇게하면 기본 인증 데코레이터를 활용할 수 있습니다 (@permission_required 그리고 @user_passes_test) 및 기타 앱/관리 사이트에서도 귀하의 권한도 존중할 수 있습니다. 생성 된 사용자 개체 및 권한은 Django의 사용자/권한 테이블에 상주 할 필요가 없으며 로그인시 사실상 생성 될 수 있습니다. 나는 이것으로 상당한 성공을 거두었습니다.

보다 인증 백엔드 작성 이것이 호소하는 경우.

다른 팁

미들웨어에서 인증 (권한 시스템)을 구현하면 두 가지 옵션이됩니다.

  1. URL을 점검하고 액세스 할 수 있습니다
  2. URL을 확인하고 액세스를 거부하십시오

요구 사항이 훨씬 간단하다면보기를 터치 할 필요가 없기 때문에 괜찮습니다.

그러나 일반적으로 권한 시스템은 예를 들어 다음과 같이 훨씬 복잡합니다.

  1. 사용자는 foo/show_all에 액세스 할 수 있습니다.
  2. 그러나 그는 foo 인스턴스, 즉 foo/show/foo_1/를 보거나 액세스 할 수 없습니다.
  3. 그는 foo_1 인스턴스에 액세스 할 수 없으므로 show_all (모든 foo 인스턴스)에 표시해서는 안됩니다.

3 이상을 함께 구현하고 싶다면 Django와 함께 일하는 자신의 승인 백엔드를 작성하는 것이 좋습니다. 몇 가지 방법 (특정 논리)을 구현하고 백엔드로 첨부하기 만하면됩니다.

읽다: http://docs.djangoproject.com/en/dev/topics/auth/#handling-authorization-in-custom-backends

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top