it-mot-dan-vi.com

Làm thế nào để hạn chế quyền truy cập vào chế độ xem thành phần tùy chỉnh?

Trong thành phần tùy chỉnh của tôi, tôi muốn có thể giới hạn các chế độ xem cụ thể đối với chỉ một số nhóm người dùng nhất định. Nếu tôi tạo một mục menu cho một trong các chế độ xem của mình, điều đó khá dễ thực hiện: Tôi chỉ cần chọn cấp độ truy cập cho mục menu đó và tôi đã hoàn tất.

Bây giờ, vấn đề sẽ xảy ra nếu ai đó cố gắng truy cập trực tiếp một URL với tùy chọn = com_mycomponent hoặc bất kỳ chuyển hướng nội bộ nào của thành phần của tôi đi đến một trang không có Itemid được chỉ định ... trong trường hợp đó, chính nó là thành phần cần thiết để kiểm tra nhóm người dùng và xác định xem nó có thể xem trang đó không ... làm cách nào tôi có thể hạn chế điều đó trong mã của mình? Chỉ cần một kiểm tra mã hóa đơn giản cho nhóm người dùng? Hoặc có một cách "tiêu chuẩn" để làm điều đó?

Tôi đã kiểm tra tài liệu và đã tìm thấy điều này:

http://docs.j Joomla.org/J2.5:How_to_imây_ilities_in_your_code

nhưng đó là cho những gì người dùng có thể làm, không phải cho những gì người dùng có thể nhìn thấy. Tôi cũng đã tìm thấy chủ đề diễn đàn này:

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

mã lúc đầu khá cũ, nhưng cuối cùng nên sử dụng mã này:

http://api.j Joomla.org/cms-3/groupes/JUser.html#method_ mượtise

Làm thế nào tôi nên tiến hành cho điều đó? Tôi có nên xác định tài sản cho đối tượng chính được tạo bởi chế độ xem của mình để tôi có thể kiểm tra quyền truy cập cho nó bằng JUser không?

Cảm ơn trước.

11
Isidro Baquero

Bạn có thể tạo một plugin hệ thống để xử lý tất cả yêu cầu đến thành phần tùy chỉnh của mình trước khi gửi điều khiển đến thành phần đó.

Sử dụng onAfterRoute sự kiện để thực hiện tất cả kiểm tra truy cập.

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
}
9
Nick

Đây là mã bạn cần để bắt đầu với việc chỉ cho bạn cách xem người dùng đang ở trong nhóm nào.

$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/>';
}
4
GDP

Có lẽ là câu trả lời muộn cho câu hỏi này. Nhưng đây là những gì tôi đã sử dụng:

Trong tệp control.php chính, tôi đã ghi đè chức năng hiển thị như sau:

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);
 }
4
Sahil Purav