Kullanıcılar ve gruplarla veritabanı oluşturmak için temel model nedir?


9

Bir web sitesi için temel bir güvenlik sistemi için en iyi yolu bulmaya çalışıyorum. Kullanıcıları ve grupları istediğimi biliyorum.

Ben olurdu düşündüm:

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

Birincisi kullanıcı, ikincisi grup, üçüncüsü ise ikisini birbirine bağlayan ara tablo. Bir kullanıcının birçok grubu vardır.

Kulağa hoş geliyor mu?


İsimler dışında. Sizin GROUP_TYPEtablo adlı olmalıdır GROUPveya benzeri bir şey ve sizin GROUP_TABLEo bağlantılandırdığını ne gibi Kullanıcılar ve Gruplar hem başvuruda bulunmalıdır.
Adam Musch

@adam group_table bunu user_id ve group_id ile yapmaz mı?
johnny

4
@AdamMusch Ayrılmış bir kelime olduğu için GROUP olarak adlandırılmamalıdır. Tablolar ve sütunlar asla ayrılmış sözcüklerden sonra adlandırılmamalıdır
Philᵀᴹ

1
@Phil kabul etti. Bir tabloyu SELECTve alanı da adlandırabilirsiniz, FROMböyleceSELECT [FROM] FROM [SELECT]
JNK

2
Temel varlıkları 'app_user' ve 'app_role' gibi bir şey aramayı deneyin
ConcernedOfTunbridgeWells

Yanıtlar:


17

Bunu modellemenin geleneksel yolu, Rol Tabanlı Güvenlik adlı bir desen kullanmaktır .

Fikir sadece kullanıcı gruplarına sahip olmak değil, aynı zamanda izin gruplarına sahip olmaktır. Desen şöyle görünür:

Rol Tabanlı Güvenlik ERD

Tablo adları için ayrılmış sözcüklerden kaçınmak istediğinizi unutmayın, bu nedenle tablolarınızı tam olarak şekilde gösterildiği gibi adlandırmayın.

Çalışma şekli, gruplarınızın veya Rollerinizin yalnızca kendilerine atanan kullanıcıların bir listesini değil aynı zamanda kendilerine atanan izinlerin bir listesini de içermesidir. Bu, hem beni kim yapabilir, hem de beni takip ederse, ne yapabileceğini masaya sürmenizi sağlar.


Ancak, kullanıcımın yönetici gibi bir rolü varsa veya herhangi bir nedenle ve aynı nedenden ötürü aynı kullanıcının da belirli bir izne ihtiyacı vardır (bu rolde olmayan veya başka herhangi bir rolde olmayan)?
levi

@ levi - Bu durumda, bunun üstesinden gelmenin bir yolu, "Bob'un Özel İzinleri" gibi özel bir rol yapmaktır , ki bu biraz çamurdur, ancak çok fazla istisnanız olmadığı sürece sorunu çözer. bu. Bireysel bir istisna olduğunu düşündüğünüz şey, aslında dikkate almadığınız ince ve yeni bir rol olabilir. Bob istifa ettiğinde ne olur? Bob'un değiştirilmesinin de bu olağanüstü izne ihtiyacı var mı? Eğer öyleyse, o zaman istisna değil, bir üye ile rolünüz vardır.
Joel Brown

@levi - Başka bir olasılık gerçekten bireysel ve rol haklarının bir karışımına sahip olmanız gerektiğidir. Bu durumda, ROLEtablonuz Bireysel ve Grup türlerine alt gruplara ayrılabilir; burada grup türü sıfırdan çok üyeye ve bireysel türün tam olarak bir üyesi vardır. Bu kardinalite kurallarını nasıl uyguladığınız size bağlıdır. Veritabanı şemanızda bildirici olarak yapılabilir, bu durumda resimde görülen şemayı biraz değiştirmeniz gerekir. Veya uygulama mantığını kullanabilirsiniz, bu durumda şemanız hala yukarıda gördüğüm gibi görünüyor.
Joel Brown
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.