--=REKLAMA=--
Używam własnych grup użytkowników (role użytkowników) w Joomla 1.5. Na przykład do grupy użytkowników zarejestrowanych dodałem kilka podgrup:
myproject customers customer A admin product manager product manager admin etc....
Korzystam z tych podgrup w moim rozszerzeniu, aby ustawić prawa dostępu.
Mimo że dodaję grupy do tabeli jos_core_acl_aro_groups i poprawnie ustalam grupom relacje, nie są one poprawnie wyświetlane na stronie menedżera użytkowników. Aby wyświetlić grupy poprawnie, konieczna jest zmiana kodu w pliku /administrator/components/com_users/admin.users.php około linii 285:
(Nie jestem pewien, w której wersji zostało to zmienione - ale w Joomla! 1.5.14 zmiany tej nie dokonujemy w pliku administrator/components/com_users/admin.users.php. Zmiany tej musimy dokonać w administrator/components/com_users/views/user/view.html.php w linii 113.)
if ( $userGroupName == $myGroupName && $myGroupName == 'administrator' ) { // administrators can't change each other $lists['gid'] = '<input type="hidden" name="gid" value="'. $user->get('gid') .'" /><strong>'. JText::_( 'Administrator' ) .'</strong>'; } else { $gtree = $acl->get_group_children_tree( null, 'USERS', false );
na następujący kod:
if ( $userGroupName == $myGroupName && $myGroupName == 'administrator' ) { // administrators can't change each other $lists['gid'] = '<input type="hidden" name="gid" value="'. $user->get('gid') .'" /><strong>'. JText::_( 'Administrator' ) .'</strong>'; } else { $gtree = $acl->get_group_children_tree( null, 'USERS', true);
Jeśli chcesz dodać swoje własne grupy użytkowników, zrób co następuje:
Wyedytuj tabelę jos_core_acl_aro_groups (np. za pomocą phpmyadmin) i dodaj swoje własne grupy. Upewnij się, że każdej grupie przypisujesz poprawnie grupę obejmującą (rodzica). Na przykład grupa zarejestrowanych użytkowników Joomla ma ID 19. Dodając własną grupę upewnij się, że w polu parent_id umieściłeś tę właśnie wartość – 19. Nie przypisuje jeszcze pól lft and rght, ale użyj poniższego kodu, by przebudować poprawnie drzewo (strukturę) grup.
<?php // Edytuj zmienne ponizej, by dostosowac do swojej // konfiguracji. Pozostaw localhost, chyba ze WIESZ // ze trzeba podac inna nazwe serwera bazy danych niz localhost. $user=UZYTKOWNIK ; $password=HASLO ; $db=BAZA_DANYCH ; $host=localhost ; mysql_connect("$host", "$user", "$password") or die("Could not connect: " . mysql_error()); mysql_select_db("$db"); // 0-> parent_id in Joomla this is the value of the parent_id field of the Root record // 1-> start the left tree at 1 rebuild_tree ( 0 , 1); function rebuild_tree($parent_id, $left) { // the right value of this node is the left value + 1 $right = $left+1; // get all children of this node $result = mysql_query('SELECT id FROM jos_core_acl_aro_groups '.'WHERE parent_id="'.$parent_id.'";') or die(mysql_error()); while ($row = mysql_fetch_array($result)) { // recursive execution of this function for each // child of this node // $right is the current right value, which is // incremented by the rebuild_tree function $right = rebuild_tree($row['id'], $right); } // we've got the left value, and now that we've processed // the children of this node we also know the right value mysql_query('UPDATE jos_core_acl_aro_groups SET lft='.$left.', rgt='. $right.' WHERE id="'.$parent_id.'";'); // return the right value of this node + 1 return $right+1; } echo 'Complete! Go check your Joomla User Admin!' ?>
Jeśli chcesz skorzystać ze swoich własnych grup użytkowników, na przykład by przypisać je do artykułów, żeby określone artykuły mogli przeglądać tylko klienci, musisz dodać te grupy do tabeli jos_groups, dokładnie przypisać ID + name grupy tak, aby name odpowiadało nazwom grup, które dodałeś do tabeli jos_core_acl_aro_groups.