Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [model] dostęp do danych w profilu, nie mam pomysłu na model
Cezar708
post 4.11.2009, 23:18:06
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
Go to the top of the page
+Quote Post
Crozin
post 5.11.2009, 10:26:09
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?
Go to the top of the page
+Quote Post
Cezar708
post 6.11.2009, 13:43:50
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Fixus
post 6.11.2009, 14:33:01
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
Go to the top of the page
+Quote Post
dr4ko
post 6.11.2009, 14:58:53
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
Go to the top of the page
+Quote Post
phpion
post 6.11.2009, 16:00:17
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.
Go to the top of the page
+Quote Post
Fixus
post 6.11.2009, 16:44:53
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 smile.gif
Go to the top of the page
+Quote Post
Cezar708
post 8.11.2009, 09:45:36
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
- 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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 06:34