Joomla! Україна

Дізнавайся про останні події української та світової спільноти
  • Версія Joomla! 5.1.0 від 16.04.2024
  • 60 записи в блогах
  • 791 новини та статті
     

Joomla! Access Control Plugin - плагін для розподілу рівнів доступу в Joomla!

11.02.2008, 05:53  |  Новини розширень Joomla!  |  Денис Носов

Як Ви можливо знаєте, що Joomla 1.5 не дає гранульованого рівня доступу, хоча ACL повинно бути доспупним у версії Joomla 1.6, але це поки що стоїть під питанням. У цей час Роберто Алой (Roberto Aloi – a.k.a. Prof3ta) вирішив цю задачу для Joomla 1.5, написавши простий плагін.

Це доволі простий плагін, який повинен вирішити деякі базові рівні контролю доступа Joomla 1.5.х – компоненти, модулі і т.д.

Якщо Вам необхідно розбити користувачів по групам (наприклад, студентів та викладачів), даючи їм конкретні рівні доступу як в Адміністративній частині, так і в Фронтальній, то у цьому Вам допоможе саме Joomla! Access Control Plugin.

Як використовувати Joomla! Access Control Plugin?

Розглянемо наступну специфікацію, яка буде використовуватися:

  • ACO (Access Control Object) – підтримка контролю доступом (операції, які доступні або недоступні в межах Компоненту);
  • ARO (Access Request Objects) – підтримка контролю запитів (Ваші Користувачі);
  • AXO (Access eXtension Objects) – підтримка контролю доступу до Розширень.

Першим кроком буде встановлення плагіну через Менеджер Встановлення.

Далі Ви повинні додати наступні таблиці до бази даних:

  • #__acl_acos
  • #__acl_aro_groups
  • #__acl_aro_groups_acos_map
  • #__acl_aros_aro_groups_map
  • У даний момент, відсутній будь-який графічний інтерфей, щоб можна було керувати цими таблицями, таким чином Ви повинні керувати базою даних вручну!

    Також Joomla не пропонує можливість виконувати SQL-запити, таким чином необхідно їх виконати вручну. Для цього можете використати цей вихідний SQL-файл (prof3taacl.sql.txt), який необхідно перейменувати з розширенням .sql. Або Ви можете, використовуючи MyPHPAdmin виконати наступний запит:

    DROP TABLE IF EXISTS `#__acl_aro_groups_acos_map`;
    DROP TABLE IF EXISTS `#__acl_aros_aro_groups_map`;
    DROP TABLE IF EXISTS `#__acl_aro_groups`;
    DROP TABLE IF EXISTS `#__acl_acos`;
    
    CREATE TABLE IF NOT EXISTS `#__acl_acos` (
     `id` int(11) NOT NULL auto_increment,
     `axo_id` int(11) NOT NULL,
     `aco_name` varchar(255) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `axo_id` (`axo_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `#__acl_aro_groups` (
     `id` int(11) NOT NULL auto_increment,
     `name` varchar(255) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `#__acl_aro_groups_acos_map` (
     `aro_group_id` int(11) NOT NULL,
     `aco_id` int(11) NOT NULL,
     KEY `aro_group_id` (`aro_group_id`),
     KEY `aco_id` (`aco_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `#__acl_aros_aro_groups_map` (
     `aro_id` int(11) NOT NULL,
     `aro_group_id` int(11) NOT NULL,
     KEY `aro_id` (`aro_id`),
     KEY `aro_group_id` (`aro_group_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    

    Перша таблиц (#__acl_acos) містить так званий ACO (див. специфікацію). Таблиця створена таким чином:

    id |	axo_id | aco_name
    ---------------------------
    1 |	37 | giveGrade
    2 |	37 | receiveGrade 

    де:

    • id – ACO індифікатор;
    • axo_id – component_id компонента;
    • aco_name – символічна назва для дії, яку Користувач може виконати в межах Компонента.

    Наступна таблиця (* __ acl_aro_groups) представляє групи Користувачів. Таблиця створена таким чином:

    id |	name
    -------------------
    1 |	студенти
    2 |	викладачі
    

    Третя таблиця (* __ acl_aro_groups_acos_map) містить всі співвідношення між групами ARO і ACO. Таблиця створена таким чином:

    aro_group_id | aco_id
    ---------------------------
    1  | 1	
    1  | 1	 
    

    У даному випадку, студенти можуть отримати оцінку, а викладачі можуть виставити її.

    Остання таблиця (* __ acl_aros_aro_groups_map) містить всі співвідношення, між ARO (Joomla! зареєстрованими Користувачами) та їх групами ARO. Таблиця створена таким чином:

    aro_id | aro_group_id
    ---------------------------
    65 | 1
    66 | 2  
    

    Де 65 – зареєстрований студент, а 66 – зареєстрований викладач.

    Теперь, одна річ, про яку Ви повинні подбати – створити таблиці відповідно до ваших вимог.

    Розробник збирається написати графічний інтерфейс для простого використання.

    Якщо Ви хочете керувати доступом для одного або більше компонентів, Ви можете використовувати наступну функцію:

    $mainframe->triggerEvent( 'onAccessingSafeComponent', array($userId, $acoId));
    

    А ось приклад, як  можна використовувати цю функцію:

    <?php
    
    $user =& JFactory::getUser();
    $userId = $user->id;
    
    // Import the user plugin group
    JPluginHelper::importPlugin('user');
    
    // Let's fire the onAccessingSafeComponent event
    $canGiveGrades = $mainframe->triggerEvent( 'onAccessingSafeComponent', array($userId, '1'));
    
    if ($canGiveGrades[0] == '1'){
    	// CODE TO GIVE GRADES GOES HERE
    }
    
    ?>
    

    Roberto Aloi: prof3ta.netsons.org

Завантажити:

Читайте також