Nasıl etkili kullanıcı rollerini ele?

3 Cevap php

Bu nedenle burada etli eşyalarım tür muğlak:

Ben aşağıdakilerden birini yapın kimlik doğrulama sistemlerini gördük

  1. tek bir tabloda her roller için ayrı bir rol tablo ve ayrı izinleri tablo, tüm kullanıcıların
  2. yöneticiler için ayrı bir tablo var

Ben cevapsız bir sürü biliyorum, var. Ama gerçekten sormaya çalışıyorum olduğunu:

Nasıl ben farklı erişimi olan bir kullanıcı çeşit çok ve her biri sahip bir web sitesi benim veritabanı tasarımı gerekir?

Ben izinleri başka bir tür ile kullanıcı başka tür eklemek için karar eğer benim komut yeterince esnek olduğunu nasıl bunu yapacak?

Ben şu vea bir kullanıcı sınıfı var ve bu kullanıcı sınıfı genişleten benim Yönetici sınıf yapmak planlıyorum. Yoksa ben bir tek sınıfta hepsini ve sadece gerekli izinler atayabilirsiniz bir overkill biraz?

3 Cevap

Eğer tablo olabilir -

user (user_id, name ...)
permission (perm_id, name, desc)
role (role_id, title)
user_role (user_id, role_id)
user_permission (user_id, perm_id)
role_permission (role_id, perm_id)

İstediğiniz kadar bu şekilde sistemindeki gibi birçok rolleri olabilir, ve her iki rolü düzeyi izinlerini, kullanıcı düzeyi izinler var.

Eğer soyutlama ek bir düzeyi ekleyebilirsiniz. temelde kullanıcı gruplarını yönetmek için veritabanında bir tablo eklemek, ve bu gruplara grup izinleri atayın. Farklı kullanıcılar birden gruplar olabilir.

Bu şekilde hızlı bir şekilde ayrı ayrı her kullanıcı değiştirmek gerek kalmadan, kurallar önceden tanımlanmış bir dizi izinleri değiştirebilirsiniz. Ayrıca aynı anda bir kullanıcı grubu için izinleri değiştirebilir

Burada çeşitli kavramlar hakkında düşünmemiz gerekiyor. İlk bir erişim kontrol listesi olacaktır (ACL) ve daha sonra ikinci bir kimlik olacaktır.

ACL'deki, bir kaynağa erişim isteyebilir nesnelerdir size erişim ve roles kısıtlamak istediğiniz nesneleri, hangi, resources tanımlar.

Ben ACL uygulamak yolu kullanarak Zend_Acl. Edilir I user_roles adında bir tablo var

user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')`

Ben de bir kullanıcı rolü kimliğine bir kullanıcının kimliğini haritalar user_role_maps adında bir tablo var. (Sadece kullanıcı masada bir sütunu olarak bu olabilir, ama bu sadece ;-) normalleşme hakkında hissediyorum nasıl bağlıdır.) Bir kullanıcı kimlik doğrulaması zaman ben, daha sonra bu tablodan benim Zend_Acl nesnesi oluşturmak ve, ben can onlar izin ve ne bir kaynak üzerinde gerçekleştirebileceğiniz eylemler var hangi kaynakları belirlemek. (Bir kaynak uygular Zend_Acl_Resource_Interface bu yüzden bir kaynak olarak Zend_Acl ile tanımlanabilir.

Kimlik doğrulaması için, bu muhtemelen kendinizi belirteç eşleşen kimlik doğrulama sisteminin bazı formu anladım, (bence) basit bir kavramdır. Önemli yönü rollerini belirlemek için kimliği doğrulanmış kullanıcının kimliğini kullanıyor. Zend Framework de Zend_Auth Bu bir paket sağlar.

Burada Zend Framework öneriler bir sürü kullandım, bunun nedeni onların paketleri Ben diğer çerçeveler kullanmak olabilir ACL paketleri sağlamak eminim içeri oldukça basit bileşenleri takmak için yapım, diğer paketlerin üzerinde çok az bağımlılıkları olması Eğer zaman ve anlayış varsa, ya da kendi dışarı rulo.

İyi Şanslar.