Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [model] dostęp do danych w profilu
Forum PHP.pl > Forum > PHP
Cezar708
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
Crozin
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?
Cezar708
Cytat(Crozin @ 5.11.2009, 10:26:09 ) *
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.

Cytat(Crozin @ 5.11.2009, 10:26:09 ) *
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
- email
- 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
Fixus
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
dr4ko
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).
phpion
@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.
Fixus
@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 smile.gif
Cezar708
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
- email
- 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
- email
- 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
- 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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.