사용자 컴포넌트 뷰에 대한 액세스를 제한하는 방법은 무엇입니까?


11

사용자 지정 구성 요소에서 특정 뷰를 특정 사용자 그룹으로 만 제한하고 싶습니다. 내보기 중 하나에 대한 메뉴 항목을 작성하면 매우 쉽습니다. 해당 메뉴 항목에 대한 액세스 레벨을 선택하기 만하면됩니다.

이제 누군가가 옵션 = com_mycomponent를 사용하여 URL에 직접 액세스하려고 시도하거나 구성 요소의 내부 리디렉션이 Itemid가 할당되지 않은 페이지로 이동하면 문제가 발생합니다.이 경우 구성 요소 자체가 필요한 것입니다 사용자 그룹을 확인하고 해당 페이지를 볼 수 있는지 확인하려면 ... 내 코드에서 어떻게 제한 할 수 있습니까? 사용자의 사용자 그룹에 대한 간단한 하드 코딩 검사입니까? 아니면 "표준"방법이 있습니까?

나는 문서를 확인하고 이것을 발견했다.

http://docs.joomla.org/J2.5:How_to_implement_actions_in_your_code

그러나 그것은 사용자가 볼 수있는 것이 아니라 사용자가 할 수있는 것입니다. 이 포럼 스레드도 찾았습니다.

http://forum.joomla.org/viewtopic.php?t=530721

시작 부분의 코드는 꽤 오래되었지만 끝에 다음을 사용하는 것이 좋습니다.

http://api.joomla.org/cms-3/classes/JUser.html#method_authorise

어떻게 진행해야합니까? JUser로 액세스를 테스트 할 수 있도록 뷰에서 생성 된 기본 객체의 자산을 정의해야합니까?

미리 감사드립니다.

답변:


9

구성 요소에 제어를 보내기 전에 사용자 정의 구성 요소에 대한 모든 요청을 처리하는 시스템 플러그인을 작성할 수 있습니다.

모든 액세스 확인을 수행 하려면 onAfterRoute 이벤트를 사용하십시오 .

function onAfterRoute()
{
  $user = JFactory::getUser();
  $groups = $user->groups;

  $jinput = JFactory::getApplication()->input;
  $option = $jinput->get('option', '');
  $view   = $jinput->get('view', '');

  // place USER-GROUP related checking here
}

흠 ... 흥미로운 접근 방식. 더 깨끗하게 들리면 모든 논리를 특정 위치에 배치해야합니다. 나는 이것이 구성 요소에서 직접 수행하는 것보다 성능 측면에서 약간 "더 나빠질"것 같지만 아마도 관련없는 밀리 초라고 생각합니까?
Isidro Baquero

글쎄요, 당신은 말할 수 있습니다 ... 여전히이 밀리 초의 성능 히트는 구성 요소의 전체 성능에 많은 영향을 미치지 않으며 모든 트리거가 사용 된 후에 :) 그리고 구성 요소 자체에 코드를 추가하고 생성하는 요점은 무엇입니까 혼란

4

다음은 사용자가 속한 그룹을 확인하는 방법을 보여주는 데 필요한 코드입니다.

$user = JFactory::getUser();
$groups = $user->groups;
if($user->id) {
    echo $user->username.' is logged in<Br/>';
    if (isset($groups[8])) echo " - User is a Super User <Br/>";
    if (isset($groups[7])) echo " - User is an Administrator <Br/>";
    if (isset($groups[6])) echo " - User is an Manager <Br/>";
}else{
    echo 'Not logged in<Br/>';
}

고마워 GDP. 이 부분은 다소 통제되었다. 그래서 나는 그것이 모든 관점에서 그것을 사용하는 "올바른 방법"을 이해하고 있습니까?
Isidro Baquero

모든 뷰를 제한하지 않는 한 일부 구성 요소 매개 변수 또는 모든 피에 사용되는 도우미 함수를 설정해야합니다.
GDP

흥미 롭습니다 ... 구성 요소 매개 변수를 통해 뷰를 제한하는 것에 대해 계속 연구 할 수있는 곳은 어디입니까? 다시 감사합니다!
Isidro Baquero

Joomla ACL에 대해서도 배우고 싶은 것 같지만 연구를 위해 Google을 제안하거나 component-creator.com에서 구성 요소를 사용 해보고 모든 것이 어떻게 작동하는지 볼 수 있습니다. 생성 된 코드에는 $ canCreate, $ canEdit 및 $ canCheckin과 같은 변수 설정이 포함됩니다. ACL에 익숙해지면 $ canView와 같은 고유 한 ACL 규칙을 설정할 수 있습니다. 모든 제안 사항-프로그래밍입니다. 천 가지 방법으로 할 수 있습니다.
GDP

롤! 그래 그래. 이해 했어, 고마워 너무 많이 배울 ...
Isidro Baquero

4

이 질문에 대한 답은 아마도 늦었을 것입니다. 그러나 여기 내가 사용한 것이 있습니다 :

메인 controller.php 파일에서 다음과 같이 표시 기능을 재정의했습니다.

public function display($cachable = false, $urlparams = array())
{
        $user = JFactory::getUser();
        $app  = JFactory::getApplication();

        $view = $this->input->get('view');

        if ($view == 'someview' || $view == 'anotherview')
        {
            if ($user->get('guest') == 1)
            {
                $uri = JUri::getInstance();
                $this->setRedirect(
                        JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode($uri->toString())), $app->enqueueMessage(JText::_('COM_YOURCOMPONENT_LOGIN_REQUIRED'), 'warning')
                );

                return;
            }
         }

        parent::display($cachable, $urlparams);
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.