Próbuję znaleźć najlepszy sposób na podstawowy system bezpieczeństwa dla strony internetowej. Wiem, że chcę użytkowników i grup.
Myślałem, że będę miał:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
Pierwszy to użytkownik, drugi to grupa, a trzeci to tabela pośrednicząca, która łączy oba. Jeden użytkownik ma wiele grup.
Czy to brzmi dobrze?
database-design
Jasio
źródło
źródło
GROUP_TYPE
tabela powinna mieć nazwęGROUP
lub coś podobnego iGROUP_TABLE
powinieneś odwoływać się zarówno do użytkowników, jak i grup, ponieważ to właśnie łączy.SELECT
i pole,FROM
aby otrzymać zapytanie typuSELECT [FROM] FROM [SELECT]
Odpowiedzi:
Tradycyjnym sposobem modelowania jest użycie wzorca zwanego Zabezpieczeniami opartymi na rolach .
Chodzi nie tylko o grupy użytkowników, ale także grupy uprawnień. Oto jak wygląda wzór:
Pamiętaj, że chcesz unikać słów zastrzeżonych dla nazw tabel, więc nie nazywaj swoich tabel dokładnie tak, jak pokazano na schemacie.
Działa to w ten sposób, że grupy lub role mają nie tylko przypisaną do nich listę użytkowników, ale także listę uprawnień do nich przypisanych. To pozwala ci kierować tabelą zarówno tych, którzy potrafią co robić, ale także tego, co mogą zrobić, jeśli pójdziesz za mną.
źródło
ROLE
tabelę można podzielić na typy indywidualne i grupy , gdzie typ grupy ma zero do wielu członków, a typ indywidualny ma dokładnie jednego członka. To, jak egzekwujesz te zasady dotyczące liczności, zależy od ciebie. Można to zrobić deklaratywnie w schemacie bazy danych, w którym to przypadku należy nieznacznie zmienić przedstawiony schemat. Lub możesz użyć logiki aplikacji, w którym to przypadku twój schemat nadal wygląda tak, jak na powyższym obrazku.