Bir web uygulamasında birden fazla kullanıcı için erişim kontrolü

4 Cevap php

I'am bir PHP üzerinde çalışan + MySQL Sosyal Ağ uygulaması, şimdi ben (okumak, oluşturmak, düzenlemek, silmek) küresel için (tüm öğeleri) ve / veya her biri için kendi ürün (kendileri tarafından oluşturulan madde) kurulum farklı erişim kontrolü gerekir grup veya belirli bir kullanıcı için modül.

Herkes bu (tablo yapıları, vb) yaparken önerileri var mı?


tamam burada ben şu anda ben bir tbl_module, tbl_user ve tbl_user_role var, daha fazla ayrıntı sağlayabilir. Her kullanıcı ve rol belirli modülüne farklı erişebilirsiniz.

  • okumak
  • güncelleştirme
  • oluşturmak
  • silmek

ve küresel erişim veya öz (kendi hesabına veya kendileri tarafından oluşturulan kayıtların) sadece tarafından devided.

ve benim şimdiki yaklaşım: i erişim detay tutmak için başka bir tablo oluşturun:

  • acl_uid
  • MOD_ID (fk modülü uid)
  • target_id (fk kullanıcı sıvı veya rol uid)
  • acl_type (hedef kimliği başvurusu tanımlamak için kullanıcı / rol)
  • acl_okumak
  • acl_güncelleştirme
  • acl_oluşturmak
  • acl_silmek

acl_read, acl_güncelleştirme, acl_oluşturmak, acl_silmek değer aralıkları:

  • 0 inkar
  • 1 izin
  • 2 (kullanıcı değeri 2 varsa o role bakın) daha düşük öncelikli check bakın
  • 3 kendilik sadece

ben bu çözmek için daha verimli bir şekilde gidecekseniz, ya da benim şimdiki yaklaşımı bir gelişme olabilir inanıyoruz.

yanıtları için teşekkürler.

4 Cevap

Bu oldukça geniş bir soru, yani siz sadece çok geniş cevaplar olasıdır.

Çoğu CMS sistemleri sisteminde üretilebilir içerik türlerini listeleyen bir tablo var.

Her bir içerik türü (vb, bireysel blog sayfaları, ön sayfada) görüntülenir nasıl başka bir tablo açıklar.

Başka bir tablo her kullanıcı bir veya daha fazla "kullanıcı türleri" veya vb yönetici, kayıtsız, moderatör olarak "gruplar" verir

Son bir tablo türlü bir erişim tablosu - bu her grup gibi o oluşturabilirsiniz içerik türleri, düzenleme, yayınlama, gibi, yapmak güç ne gösterir

Ben böyle Slashcode, Drupal gibi, diğer CMS yazılım veritabanı şemaları okuyan biraz zaman geçirmek, ya da CMS sistemleri diğer milyonlarca birini öneririz.

Bu aslında çok geniş bir soru. O zaman bu iş katmanı olacak şeyler tür, siz uygulama katman (örneğin, MVC kullanarak) net bir ayrılık var varsayarsak.

Doğrudan ihtiyaçlarını alarak, oldukça basit olabilir. Kullanıcıların tabloda, yaratıcısı temsil eden bir kimliği eklemek, her madde için vb hasEdit, hasViewvar. Iş katmanı, kural onlar yaratıcısı varsa onlar düzenleme iznine sahip, ya da hasEdit = true olması.

Farklı türleri varsa, bir çentik yukarı çekme ve hasEdit izindir per-type, bunun için başka bir varlık gerekir.

userPermission

  • userPermissionId
  • userId (FK)
  • typeid (FK)
  • hasEdit (boolean)
  • hasView
  • vb.

Onlar düzenlemek için izniniz varsa, onlar da sahibi iseniz giriş veya ürün tipi ve userPermission tabloda geçerli kullanıcı ve hasEdit kontrol etmenizi aramak bulmak için. Siz kullanıcı tabloda küresel hasEdit koyarak gibi, ek kurallar yapabiliriz. Veya NULL typeid ile userPermissionId bir giriş küresel hasEdit temsil.

Bu .. tüm aşağı gereksinimleri konusunda roller ve izinler değişken sayıları kullanarak, bir yol daha karmaşık alabilirsiniz. Dikkatle iş gereksinimlerini (kullanım durumları bir grup ile gelip) spec dışarı, ve sonra oradan tasarlayabilirsiniz gerekir. Olduğu gibi, burada özetlenen ettik (ve hatta bu muhtemelen tam olarak neye ihtiyacınız olduğunu) daha artık ile gelip için yeterli bilgi gerçekten orada değil.

Ben yaklaşım kuralları duvarı kuralları yaklaşım veya benzer bir mysql tablo bir tür kullanmak ister: Kullanıcıların kullanıcılara veya gruplara nesnelerin belirli nesneler veya gruplar üzerinde bazı haklar verebilirsiniz. Her kural kurallar tablosunda bir satır olarak yapmak. Eğer düzenlemek gibi bir eylem yapmak gerektiğinde, iç geçerli kullanıcı, geçerli kullanıcının grup, boolean düzenleme sütun ve nesne kimliği veya nesne grubu için kurallar masaya katılabilir. Herhangi bir satır alırsanız sonra tekrar izin verilir.

Orada güvenlik tasarımı oldukça birkaç yolu vardır, ve ben farklı durumlar için epeyce sevmişimdir. UNIX tarzı kullanıcı grubu diğer var. Sevdiğim başına PmWiki's security model.

I Apache benzer kullanıcı-rol-izinler yapısı kullanılan bir web sitesi geliştirildi. Bu web sitesi ile, ben "standart malzeme" ile sayfa içeriğini kaydırmak için dosyayı içeren dosya ve altbilgi içeren bir başlık kullanılan bir şablon sistemi kullanılır. Kısıtlı içeriğe sahip bir sayfa başlık komut arar, gerekli izni bir değişken olabilir ve ayarlanırsa, kullanıcı denetleyen bir auth işlevi bir rolü olduğunu izin aittir çağırır.

Kullanıcıların çoğu kullanıcı için yetki ayarı, yetki düzgün kategoriye ayrılır eğer kullanıcı-rol izinleri modelini kullanma hakkında güzel bir şey olduğunu kullanıcıya doğru rol ekleyerek basit bir konudur. Izinleri doğrudan rollerin değil, kullanıcıların bağlantılı, bu yüzden kolayca kullanıcılarının tüm sınıfların izinlerini ayarlayabilirsiniz.