Saya mencoba mencari cara terbaik untuk sistem keamanan dasar untuk situs web. Saya tahu saya ingin pengguna dan grup.
Saya pikir saya akan:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
Yang pertama adalah pengguna, yang kedua adalah grup, dan yang ketiga adalah tabel perantara yang menghubungkan keduanya. Satu pengguna memiliki banyak grup.
Apakah ini terdengar ok?
database-design
johnny
sumber
sumber
GROUP_TYPE
Tabel Anda harus dinamaiGROUP
atau yang serupa, dan AndaGROUP_TABLE
harus mereferensikan Pengguna dan Grup, karena itulah yang tertaut.SELECT
dan bidangFROM
sehingga Anda dapat memiliki pertanyaan sepertiSELECT [FROM] FROM [SELECT]
Jawaban:
Cara tradisional untuk memodelkan ini adalah menggunakan pola yang disebut Keamanan Berbasis Peran .
Idenya bukan hanya untuk memiliki kelompok pengguna, tetapi juga kelompok izin. Berikut adalah bagaimana polanya terlihat:
Perhatikan bahwa Anda ingin menghindari kata-kata yang dicadangkan untuk nama tabel, jadi jangan beri nama tabel Anda persis seperti yang ditunjukkan pada diagram.
Cara kerjanya adalah bahwa grup atau Peran Anda tidak hanya memiliki daftar pengguna yang ditugaskan kepada mereka tetapi juga daftar izin yang diberikan kepada mereka. Hal ini memungkinkan Anda untuk mengatur drive yang dapat melakukan apa, tetapi juga apa yang dapat mereka lakukan, jika Anda mengikuti saya.
sumber
ROLE
tabel Anda dapat subtipe ke tipe Individu dan Grup , di mana tipe grup memiliki nol untuk banyak anggota dan tipe individu memiliki tepat satu anggota. Bagaimana Anda menegakkan aturan kardinalitas ini terserah Anda. Ini bisa dilakukan secara deklaratif dalam skema database Anda, dalam hal ini Anda perlu mengubah skema gambar sedikit. Atau Anda mungkin menggunakan logika aplikasi, dalam hal ini skema Anda masih terlihat seperti apa yang saya gambar di atas.