공개가 제한된 모든 페이지를 볼 수 있도록하는 구독자 미들웨어 경로

CIB

내 프로젝트에서 경로와 미들웨어에 문제가 있습니다. 구독자 만 볼 수있는 주제 목록이 있습니다. 그러나 주제를 공개로 표시하여 게스트 사용자 / 공개가 주제를 볼 수 있습니다.

내가 직면 한 문제는 모든 주제를 대중에게 공개하거나 전혀 공개하지 않는다는 것입니다.

다음 구독자 미들웨어가 있습니다.

public function handle(Request $request, Closure $next)
{
    if ( $request->user() && ! $request->user()->subscribed('annual_membership') ) {
        return redirect('profile');
    } 
        
    if( Auth::Guest() ) {
        return redirect('topics')->with('error', 'You need to be a registered memeber to view this topic.');
    }

    return $next($request);
}

이것은 이와 같이 내 커널에 추가됩니다.

protected $routeMiddleware = [
    // ...
    'subscriber' => \App\Http\Middleware\Subscriber::class,
];

그런 다음 다음 경로를 설정합니다.

Route::get('voting-topics', [TopicController::class, 'topics'])->name('topics');
Route::get('voting-topics/{topic}', [TopicController::class, 'topic'])->name('topic');

Route::group(['middleware' => ['subscriber']], function () 
{
    Route::get('profile/billing', function (Request $request) {
        return $request->user()->redirectToBillingPortal();
    });

    Route::get('voting-topics/{topic}', [TopicController::class, 'topic'])->name('topic');
});

그리고 주제에 대한 내 컨트롤러.

class TopicController extends Controller
{
    public function topics(Request $request) 
    {
        if ( $request->user() && $request->user()->subscribed('annual_membership') ) {
            return $this->subscriberTopics();
        } else {
            return $this->publicTopics();
        }
    }
    
    
    private function publicTopics() 
    {
        $topics = Topic::orderBy('date', 'asc')->where('free_to_view', 1)->paginate(50);

        return view('topics.topics', compact('topics'));
    }
    
    private function subscriberTopics() 
    {
        $topics = Topic::orderBy('date', 'desc')->paginate(50);

        return view('topics.topics', compact('topics'));
    }

    public function topic(Request $request, Topic $topic) 
    {
        $topic = Topic::find($topic)->first();

        return view('topics.topic', compact(['topic',));
    }
}

주제 디렉토리가 제대로 작동합니다. 게스트에게는 공개로 표시된 항목 만, 구독자에게는 모든 주제가 표시됩니다. 내 코드는 현재 구독자가 모든 주제를 볼 수 있도록 허용하고 게스트는 내가 원하는 것이 아닌 공개 주제를 볼 수 있습니다.

미들웨어 경로를 제거하면 반대로 게스트가 주제의 URL을 입력하면 모든 주제에 액세스 할 수 있습니다.

편집하다

좀 더 명확하고 설명하기 위해 주제 목록이 있습니다 (기본적으로 블로그 게시물과 같음). 주제는 내 웹 사이트의 유료 구독자에게만 볼 수 있습니다. 그러나 일부 주제는보기 무료로 표시 될 수 있으며 모든 사람이 볼 수 있습니다.

example.com/voting-topics로 이동하면 무료 주제 만 표시됩니다. (정확하고 작동합니다.) 로그인하고 동일한 URL로 이동하면 로그인되어 있고 유료 구독자이기 때문에 모든 주제가 표시됩니다. (이것은 다시 정확하고 작동합니다)

미들웨어에서 중복 경로를 제거하면 example.com/voting-topics/123 또는 URL을 통해 직접 다른 주제 ID로 이동합니다. 구독자 만 볼 수 있지만 주제를 볼 수 있습니다.

중복 경로를 미들웨어에 다시 추가하면 일반 대중이 무료 주제에 액세스 할 수 없습니다.

공개로 표시된 주제에만 액세스하려면 게스트 / 일반 대중 / 비 구독자가 필요하지만 유료 구독자는 모든 주제에 액세스 할 수 있습니다. `

CIB

따라서 컨트롤러에서 수행해야하는 경로를 확인하는 것이 아니라 결국 간단한 수정 인 것 같습니다.

Route::get('voting-topics/{topic}', [TopicController::class, 'topic'])->name('topic');미들웨어에서를 제거한 다음 컨트롤러에 다음 코드를 추가했습니다.

if( $topic->free_to_view === 1 || Auth::check() && auth()->user()->subscribed('annual_membership')) {
    return view('topics.topic', compact('topic'));

} else {

    return redirect()->back()->with('error', 'You need to be a paying member to view this topic');

}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

모든 사용자가 업로드 된 이미지를 볼 수 있도록 허용하는 방법 VB.NET winforms

분류에서Dev

몇 개의 IP를 제외한 모든 사람에게 미들웨어를 적용해야하는데 경로를 벗어난 요청과 해상도를 얻을 수 없습니다. 어떻게 적용 할 수 있습니까?

분류에서Dev

정적 자산을 제외한 모든 경로에서 미들웨어를 실행하는 방법

분류에서Dev

사용자가 Azure DevOps Server 2019에서 모든 프로젝트를 볼 수 있도록 허용하는 방법

분류에서Dev

복잡한 매개 변수를 전달하여 미들웨어 경로 지정

분류에서Dev

경로에 Route :: group을 추가하지 않고 모든 페이지에 대해 Laravel 자동 실행 미들웨어

분류에서Dev

사용자가 페이지를 볼 수있는 권한이없는 경우에도 자신의 프로필을 볼 수 있도록 권한을 부여합니다.

분류에서Dev

로그인 한 사용자가 로그인 한 페이지 만 볼 수 있도록 강제

분류에서Dev

웹 페이지에서 볼 수있는 모든 문자를 처리하려면 어떻게합니까?

분류에서Dev

내 로컬 네트워크의 모든 사용자가 로컬에서 호스팅되는 사이트를 볼 수 있도록 '로컬'도메인을 설정하려면 어떻게해야합니까?

분류에서Dev

./routes의 모든 경로를 미들웨어 스택에 추가

분류에서Dev

파티션 도구가 kpartx에서 만든 장치를 볼 수 있도록하는 방법이 있습니까?

분류에서Dev

로컬로 제어되는 Vue.js 페이지를 "스트리밍"할 수 있으므로 모든 장치가 동일한 상태를 공유합니까?

분류에서Dev

django-인증되지 않은 사용자가 볼 수있는 페이지 수를 제한하는 방법

분류에서Dev

모든 사람이 볼 수 있도록 Javascript 변수를 서버 측 변수로 저장하는 방법

분류에서Dev

자신 만 볼 수있는 페이지에 액세스 할 수 있도록 내 사이트에 클라이언트 별 로그인을 추가하는 방법

분류에서Dev

모든 사용자가 자신의 집만 볼 수 있도록 삼바 공유를 어떻게 정의합니까?

분류에서Dev

사용자가 공개 BigQuery 데이터베이스를 쿼리하는 경우 데이터 소유자는 실행 된 쿼리를 볼 수 있습니다.

분류에서Dev

Elastic Beanstalk 작업자 환경-모든 메시지가 배달 못한 편지 대기열로 이동하는 이유를 어떻게 알 수 있습니까?

분류에서Dev

사용자가 업로드 한 이미지 위치를 볼 수 없도록 이미지 URL을 숨길 수 있습니까?

분류에서Dev

사용자가 업로드 한 이미지 위치를 볼 수 없도록 이미지 URL을 숨길 수 있습니까?

분류에서Dev

모든 이미지를 미리 볼 수있는 기능

분류에서Dev

모든 이미지를 SequenceFile에 저장하는 경우 선택한 이미지를 처리하도록 매퍼를 어떻게 디자인 할 수 있습니까?

분류에서Dev

아내가 모든 이벤트 세부 정보를 볼 수 있도록 내 Google 캘린더를 아내와 공유하려면 어떻게해야합니까?

분류에서Dev

경로를 지정하는 익스프레스 미들웨어와 같이 미들웨어를 재구성

분류에서Dev

나는 bootstrap4를 사용하여 간단한 웹 페이지를 디자인했지만 내가 시도하는 것이 무엇이든 반응하게 만들 수 없었다. 누구든지 나를 도울 수 있습니까?

분류에서Dev

내 모니터가 부분적으로 고장났습니다. xrandr 또는 유사한 도구를 사용하여 볼 수있는 공간을 줄이려면 어떻게해야합니까?

분류에서Dev

Go-chi를 사용하여 매개 변수가있는 미들웨어로 핸들러 래핑

분류에서Dev

Rails-매개 변수가 주어진 모든 사용자를 반환하면 ArguemntError (0의 경우 1)가 제공됩니다.

Related 관련 기사

  1. 1

    모든 사용자가 업로드 된 이미지를 볼 수 있도록 허용하는 방법 VB.NET winforms

  2. 2

    몇 개의 IP를 제외한 모든 사람에게 미들웨어를 적용해야하는데 경로를 벗어난 요청과 해상도를 얻을 수 없습니다. 어떻게 적용 할 수 있습니까?

  3. 3

    정적 자산을 제외한 모든 경로에서 미들웨어를 실행하는 방법

  4. 4

    사용자가 Azure DevOps Server 2019에서 모든 프로젝트를 볼 수 있도록 허용하는 방법

  5. 5

    복잡한 매개 변수를 전달하여 미들웨어 경로 지정

  6. 6

    경로에 Route :: group을 추가하지 않고 모든 페이지에 대해 Laravel 자동 실행 미들웨어

  7. 7

    사용자가 페이지를 볼 수있는 권한이없는 경우에도 자신의 프로필을 볼 수 있도록 권한을 부여합니다.

  8. 8

    로그인 한 사용자가 로그인 한 페이지 만 볼 수 있도록 강제

  9. 9

    웹 페이지에서 볼 수있는 모든 문자를 처리하려면 어떻게합니까?

  10. 10

    내 로컬 네트워크의 모든 사용자가 로컬에서 호스팅되는 사이트를 볼 수 있도록 '로컬'도메인을 설정하려면 어떻게해야합니까?

  11. 11

    ./routes의 모든 경로를 미들웨어 스택에 추가

  12. 12

    파티션 도구가 kpartx에서 만든 장치를 볼 수 있도록하는 방법이 있습니까?

  13. 13

    로컬로 제어되는 Vue.js 페이지를 "스트리밍"할 수 있으므로 모든 장치가 동일한 상태를 공유합니까?

  14. 14

    django-인증되지 않은 사용자가 볼 수있는 페이지 수를 제한하는 방법

  15. 15

    모든 사람이 볼 수 있도록 Javascript 변수를 서버 측 변수로 저장하는 방법

  16. 16

    자신 만 볼 수있는 페이지에 액세스 할 수 있도록 내 사이트에 클라이언트 별 로그인을 추가하는 방법

  17. 17

    모든 사용자가 자신의 집만 볼 수 있도록 삼바 공유를 어떻게 정의합니까?

  18. 18

    사용자가 공개 BigQuery 데이터베이스를 쿼리하는 경우 데이터 소유자는 실행 된 쿼리를 볼 수 있습니다.

  19. 19

    Elastic Beanstalk 작업자 환경-모든 메시지가 배달 못한 편지 대기열로 이동하는 이유를 어떻게 알 수 있습니까?

  20. 20

    사용자가 업로드 한 이미지 위치를 볼 수 없도록 이미지 URL을 숨길 수 있습니까?

  21. 21

    사용자가 업로드 한 이미지 위치를 볼 수 없도록 이미지 URL을 숨길 수 있습니까?

  22. 22

    모든 이미지를 미리 볼 수있는 기능

  23. 23

    모든 이미지를 SequenceFile에 저장하는 경우 선택한 이미지를 처리하도록 매퍼를 어떻게 디자인 할 수 있습니까?

  24. 24

    아내가 모든 이벤트 세부 정보를 볼 수 있도록 내 Google 캘린더를 아내와 공유하려면 어떻게해야합니까?

  25. 25

    경로를 지정하는 익스프레스 미들웨어와 같이 미들웨어를 재구성

  26. 26

    나는 bootstrap4를 사용하여 간단한 웹 페이지를 디자인했지만 내가 시도하는 것이 무엇이든 반응하게 만들 수 없었다. 누구든지 나를 도울 수 있습니까?

  27. 27

    내 모니터가 부분적으로 고장났습니다. xrandr 또는 유사한 도구를 사용하여 볼 수있는 공간을 줄이려면 어떻게해야합니까?

  28. 28

    Go-chi를 사용하여 매개 변수가있는 미들웨어로 핸들러 래핑

  29. 29

    Rails-매개 변수가 주어진 모든 사용자를 반환하면 ArguemntError (0의 경우 1)가 제공됩니다.

뜨겁다태그

보관