|
Як Ви можливо знаєте, що 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
Завантажити:
|