![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chcę zrobić pewną "społecznościową" modyfikację w aplikacji, którą piszę i chcę aby osoba wpisujące dane do swojego profilu mogła określać kto te dane może oglądać. Bardzo podobnie jest na facebook'u poniżej przedstawiam przykład: ![]() gdy klikniemy na kłódkę obok odpowiedniego pola to pojawia się możliwość ustawienia, kto ma prawo dane pole oglądać. Czy macie jakiś pomysł w jaki sposób jest rozwiązany model do takiego rozwiązania? Pozdrawiam Cezar708 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Z OOP to póki co to wiele wspólnego nie ma - to raz.
Dwa - napisz jak obecnie masz zroione pola do wypełnienia danych? Czy jest to "standardowych" kilka kolumn w bazie danych odpowiadających poszczególnym polom czy może mechanizm jest bardziej ogólny? |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Z OOP to póki co to wiele wspólnego nie ma - to raz. Oczywiście, że nie ma ponieważ jak napisałem wcześniej nie mam pomysłu na rozwiązanie. Dwa - napisz jak obecnie masz zroione pola do wypełnienia danych? Czy jest to "standardowych" kilka kolumn w bazie danych odpowiadających poszczególnym polom czy może mechanizm jest bardziej ogólny? W bazie mam standardowo wypełniony profil, po prostu tabela której struktura wygląda mniej więcej tak: Kod profile: - firstname - lastname - phone nie mam żadnych innych tabel związanych z dostępem do tych danych. System jednak potrafi rozróżnić jaka jest relacja pomiędzy uzytkownikiem a oglądanym przez niego profilem. Czyli system, użytkownik gdy wchodzi na profil innego użytkownika, wie czy to jest przyjaciel, przyjaciel przyjaciela, nieznajomy czy właściciel. Pozdrawiam Cezar708 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
zakładam, że każdy użytkownik ma jakieś id.
możesz dorobić public $access = array(); w bazie dorobić pole o nazwie access typu text gdzie wartości będą odseparowane po przecinkach. Teraz proponuje drogę po przez wykluczenie. Tzn, użytkownik ma prawo blokować dostęp innym użytkownikom. Po kliknięciu na kłódkę, łańcuch czy stopę do bazy dopisujesz przy odpowiednim userze id usera zablokowanego. Skoro powiedziałeś, że twój system rozpoznaje zależności wystarczy, że dorobisz prywatną metodę która pobierze CAŁĄ zawartość pola access, na danych zrobisz: implode(",", $item['access']); a potem sprawdzisz if(in_array($id)) // wyrzuć go z profilu else // pokaż profil |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 4 Dołączył: 16.07.2008 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
W wypadku portalu społecznościowego rozsądniejsze jest określanie osób które mogą oglądać danych niż blokować te które nie mogą (najczęściej użytkownicy chcą dopuszczać tylko znajomych do oglądania prywatnych danych).
-------------------- devFactor
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@Fixus:
O normalizacji kolega słyszał? Wystarczy zwykła tabela z dwoma polami (kto, kogo) i tyle. Można ewentualnie pójść dalej i dorobić dodatkową kolumnę "typ", gdzie 1 oznacza pozwolenie, -1 zakaz wejścia, 0 - "może pozwolę..." i mt_rand(0, 1) hehe. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
@phpion
kolega słyszał to raz a dwa można troszkę grzeczniej. Mama kultury nie uczyła ? A do sedna...pobranie jednego pola po kluczu głównym jak na mój gust jest całkiem wydajne. @dr4ko masz rację. Dużo lepiej zrobić na odwrót ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wszystkim za odpowiedź, ale jednego nie przewidzieliście. Jak to zrobić dla każdej z danych w profilu.
Przykładowo mam klasę która mapuje tabelkę z mojego postu (~Fixus tak oczywiście jest ID), która wygląda tak: Kod profile: - id - firstname - lastname - phone wg pomysłu ~Fixusa, który został zmodyfikowany przez ~dr4ko tabelka miałaby wyglądać mniej więcej tak: Kod profile: - id - firstname - lastname - phone - access no i pojawia się problem, bo ja nie chcę globalnie blokować CAŁEGO profilu. Ja chcę mieć możliwość blokowania poszczególnych pól, Oczywiście mogę zrobić małą modyfikację: Kod profile: - id - firstname - firstname_access - lastname - lastname_access - email_access - phone - phone_access W columnach *_access miały by się pojawiać identyfikatory użytkowników którzy mają prawo oglądać danych z profilu? Wydaje mi się, że przy dość mocno rozbudowanej liczbie użytkowników te kolumny mogą zacząć rosnąć. Poza tym nie bardzo widzę zarządzanie tym. Co jeśli zostanie dodany nowy użytkownik, który jest moim kumplem, to właściciel profilu powinien go ręcznie dodać do przyjaciół oraz do możliwości podglądu? Jak wcześniej napisałem system rozpoznaje relację pomiędzy użytkownikiem zalogowanym, a aktualnie oglądanym profilem. Jest metoda, która zwraca integer i tak: Kod 0 - właściciel 10 - przyjaciel 50 - przyjaciel przyjaciela 80 - całkowicie obcy ale zalogowany użytkownik 99 - całkowicie obcy i niezalogowany użytkownik Czy dobrym pomysłem będzie umieszczenie w kolumnach *_access poziomu od którego użytkownik ma prawo oglądać dane profilu? Przykład krotki: Kod id | firstname | firstname_access | lastname | lastname_access | email | email_access | phone | phone_access ---+-----------+------------------+----------+-----------------+----------+--------------+-------+------------- 11 | Adam | 99 | Kowalski | 10 | ak@wp.pl | 0 | | co oznaczałoby, że imię może zobaczyć każdy, nazwisko tylko przyjaciele, email tylko właściciel, a telefon nie został zdefiniowany. Czy takie podejście jest dobre? Czy nie macie innego - bardziej prostego sposobu na zarządzanie takimi prawami? Proszę o odpowiedź, pozdrawiam. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 06:34 |