![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Ostatnio zaczełem pisać autoryzacje dla frameworka bardzo podobną do tej którą napisał Ludvik, bo moim zdaniem lepszej nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Struktura tabel wygląda tak: users - (id, name, password): przechowuje dane o użytkownikach user_groups(id, uid, gid): przechowuje przynależność danego użytkownika (uid, tabela users) do danej grupy z uprawnieniami (gid, tabela groups) roles - (id, name): nazwa pojedyńczej roli groups - (id, name): nazwy istniejących grup group_roles(id, rid, gid): przechowuje role (rid, tabela roles) przypisane grupą(gid, tabela groups) (tylko identifikatory) No i teraz chciałem pobrać dane konkretnego użytkownika z bazy, hasło, nick i role. Czyli musze pobrać hasło, nick następnie odczytać jego przynależność do danej grupy i potem odczytać wszystkie role przypisane tej grupie. Zrobiłem takie coś:
Ale to nie jest poprawne bo wyskakują mi nieodpowiednie role :/ Najlepiej jak zapytanie będzie bardzo wydajne. Pozdrawiam Apo |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Poproszę przykładową strukturę, najlepiej z danymi.
Ten post edytował splatch 5.09.2006, 21:28:23 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Kod -- phpMyAdmin SQL Dump
-- version 2.8.1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Czas wygenerowania: 06 Wrz 2006, 16:23 -- Wersja serwera: 5.0.22 -- Wersja php: 5.1.4 -- -- Baza danych: `apos` -- -- -------------------------------------------------------- -- -- Struktura tabeli dla `action_roles` -- CREATE TABLE `action_roles` ( `id` int(10) NOT NULL auto_increment, `aid` int(10) NOT NULL, `rid` varchar(10) NOT NULL, `parameters` varchar(20) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10; -- -- Zrzut danych tabeli `action_roles` -- INSERT INTO `action_roles` VALUES (1, 1, '1', NULL); INSERT INTO `action_roles` VALUES (2, 1, '4', NULL); INSERT INTO `action_roles` VALUES (3, 2, '1', '$news_id'); INSERT INTO `action_roles` VALUES (4, 2, '2', '$news_id'); INSERT INTO `action_roles` VALUES (5, 2, '4', NULL); INSERT INTO `action_roles` VALUES (6, 3, '1', '$news_id'); INSERT INTO `action_roles` VALUES (7, 3, '3', '$naes_id'); INSERT INTO `action_roles` VALUES (8, 3, '4', NULL); INSERT INTO `action_roles` VALUES (9, 4, '4', NULL); -- -------------------------------------------------------- -- -- Struktura tabeli dla `actions` -- CREATE TABLE `actions` ( `id` int(10) NOT NULL auto_increment, `name` varchar(25) NOT NULL, `prefether` varchar(30) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5; -- -- Zrzut danych tabeli `actions` -- INSERT INTO `actions` VALUES (1, 'NewsViewAction', NULL); INSERT INTO `actions` VALUES (2, 'NewsEditAction', 'newsPrefether'); INSERT INTO `actions` VALUES (3, 'NewsDeleteAction', 'newsPrefether'); INSERT INTO `actions` VALUES (4, 'NewsAddModAction', 'newsPrefether'); -- -------------------------------------------------------- -- -- Struktura tabeli dla `group_roles` -- CREATE TABLE `group_roles` ( `id` int(10) NOT NULL auto_increment, `rid` int(10) NOT NULL, `gid` int(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5; -- -- Zrzut danych tabeli `group_roles` -- INSERT INTO `group_roles` VALUES (1, 1, 1); INSERT INTO `group_roles` VALUES (2, 2, 2); INSERT INTO `group_roles` VALUES (3, 3, 2); INSERT INTO `group_roles` VALUES (4, 4, 3); -- -------------------------------------------------------- -- -- Struktura tabeli dla `groups` -- CREATE TABLE `groups` ( `id` int(10) NOT NULL auto_increment, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4; -- -- Zrzut danych tabeli `groups` -- INSERT INTO `groups` VALUES (1, ''); INSERT INTO `groups` VALUES (2, ''); INSERT INTO `groups` VALUES (3, ''); -- -------------------------------------------------------- -- -- Struktura tabeli dla `roles` -- CREATE TABLE `roles` ( `id` int(10) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5; -- -- Zrzut danych tabeli `roles` -- INSERT INTO `roles` VALUES (1, 'NewsView'); INSERT INTO `roles` VALUES (2, 'NewsEdit'); INSERT INTO `roles` VALUES (3, 'NewsDelete'); INSERT INTO `roles` VALUES (4, 'administrate'); -- -------------------------------------------------------- -- -- Struktura tabeli dla `user_groups` -- CREATE TABLE `user_groups` ( `id` int(10) NOT NULL auto_increment, `uid` int(10) NOT NULL, `gid` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3; -- -- Zrzut danych tabeli `user_groups` -- INSERT INTO `user_groups` VALUES (1, 0, 3); INSERT INTO `user_groups` VALUES (2, 1, 1); -- -------------------------------------------------------- -- -- Struktura tabeli dla `users` -- CREATE TABLE `users` ( `id` int(10) NOT NULL auto_increment, `name` varchar(20) NOT NULL, `password` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3; -- -- Zrzut danych tabeli `users` -- INSERT INTO `users` VALUES (1, 'apo', 'pass'); INSERT INTO `users` VALUES (2, 'noob', 'pass'); |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie jest prawidlowe i zwraca 1 role NewsView, tak przynajmniej zauwazylem. Przesledz jeszcze raz dane w bazie.
Co do wydajnosci do index na zlaczenie czyli to co jest w where i to co jest po ON bo narazie masz tylko klucze podstawowe. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie jest prawidlowe i zwraca 1 role NewsView, tak przynajmniej zauwazylem. Przesledz jeszcze raz dane w bazie. Jaki kretyn ze mnie. Miałem źle przypisanych użytkowników do swojej grupy, a dokładniej tu: - INSERT INTO `user_groups` VALUES (1, 0, 3); ;( @SongoQ jestes bogiem ;p |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:39 |