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?


11

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.

Câu trả lời:


9

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 sự kiện onAfterRoute để 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
}

Hmmm ... cách tiếp cận thú vị. Âm thanh sạch hơn, và bạn sẽ đặt tất cả logic ở một nơi cụ thể. Tôi đoán điều này sẽ hơi "tệ" hơn về mặt hiệu suất so với việc thực hiện trực tiếp trong thành phần, nhưng có lẽ chỉ là một phần nghìn giây không liên quan, phải không?
Isidro Baquero

tương đối tốt, bạn có thể nói rằng ... tuy nhiên lần nhấn hiệu suất mili giây này không tạo ra nhiều ảnh hưởng đến hiệu suất tổng thể của thành phần và sau tất cả các kích hoạt này được sử dụng :) và ý nghĩa của việc thêm mã bổ sung vào chính thành phần đó và tạo ra nhầm lẫn
Nick

4

Đâ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/>';
}

Cảm ơn GDP. Phần này ít nhiều đã được kiểm soát. Vì vậy, tôi hiểu "cách đúng" để làm điều đó là sử dụng điều đó trên mọi chế độ xem?
Isidro Baquero

Bạn sẽ phải, trừ khi bạn muốn hạn chế tất cả các chế độ xem, trong trường hợp đó, bạn sẽ thiết lập một số tham số thành phần hoặc chức năng trợ giúp được sử dụng cho mỗi fiew.
GDP

Thú vị ... tôi có thể đi đâu để tiếp tục nghiên cứu về việc hạn chế lượt xem thông qua các tham số thành phần? Cảm ơn một lần nữa!
Isidro Baquero

Nghe có vẻ như bạn có thể muốn tìm hiểu về Joomla ACL, nhưng tôi chỉ có thể đề xuất Google cho nghiên cứu hoặc thử một thành phần tại component-creator.com và xem tất cả hoạt động như thế nào. Mã được tạo của họ bao gồm các biến thiết lập như $ canCreate, $ canEdit và $ canCheckin. Khi bạn thực sự quen thuộc với ACL, bạn có thể đặt quy tắc ACL của riêng mình như $ canView. Tất cả chỉ là những gợi ý - đó là lập trình, bạn có thể thực hiện hàng ngàn cách khác nhau.
GDP

CƯỜI LỚN! Ừ ừ. Đã hiểu, cảm ơn. Quá nhiều thứ để học ...
Isidro Baquero

4

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);
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.