Birden çok izin düzeyleri ile birden fazla kullanıcı yapısı nasıl?

2 Cevap php

Ben ile çalışıyorum Site kullanıcıları ve izinleri ile ilgili ile biraz dolambaçlı bir yol vardır.

Bu kullanıcı türleri şunlardır:

  • Kullanıcı
  • Tesis Approver
  • Tesis Yönetici
  • Kurumsal Approver
  • Kurumsal Yönetici

Şimdi orada tesisleri de vardır ve bu izin düzeyleri devreye girer nerede olduğunu. İmkanları gibi gibi bir tabloda kullanıcı ve kullanıcı düzeylerine bağlıdır:

user_id     facility_id     userlevel
joebob      ABCInc          Tesis Yönetici

Şimdiye kadar oldukça basit, ama şimdi ne istediğim bir kullanıcı seviyesi belirli bir tesis için başka bir kullanıcı düzeyinde kısıtlamaları ayarlamak için izin vermek mümkün değildir. Örneğin, ben Tesis Yönetici ve ben sadece Kullanıcılar belirli formları göndermek için izin istiyor. Bunu nasıl saklamak istiyorsunuz?

Ben facility_id, userlevel ve permissionlevel bağlayan yeni bir tablo düşünüyordum. Ama permissionlevel tam olarak ne olurdu? Bir int? Ya canOrderThings veya canSearchForStuff gibi Tabloya sütun eklemek istiyorum?

Gibi this iş olsaydı ben görüyordum, ama bu izinleri sayıda varsa takip etmek biraz dağınık ve sert alacağı gibi görünüyor. Nasıl wack dışında her şeyi atma olmadan izin düzeylerini eklersiniz? Hatta izin düzeylerini ayarlama bence biraz zor olacaktır.

Ayrıca kullanıcı seviyeleri, doğrudan kullanıcı Tablo kullanıcılar, ancak bu sunucu, farklı amaçlar bağlantılıdır.

Tüm bu yapı tamamen iyi bir yolu var mı?

2 Cevap

Using a second table for options is a good idea. Some forum frameworks use this method.
Each of your users are given a UserGroupId which is usually an Int since they are easiest to work with. UserGroupId of 1 for instance, could be an admin, 2 could be a teacher (depends on your organization).

Sonra, İzinler adında bir tablo var bu tabloda size Sütunlar, bu gibi bir şey olarak tüm seçenekleri içerir.

UserGroupID --|-- SearchEnabled --|-- CanOrder
             1                   0           1
             2                   1           1

Basit bir ikili sistem, 1 etkin, 0 devre dışı kullanarak, her kullanıcı grubu için seçenekleri kontrol edebilirsiniz. Bu hala özelleştirme için çok geniş bir alanı sunarken, tek bir sorgu ile tüm izinleri almayı sağlar.

Gerçi ikili numaraları kullanmak zorunda değilsiniz. 1 tam izni nerede Örneğin siz değerleri 1,2,3 kullanabilirsiniz, 2 kısmi, ve 3 sıfırdır. Bu düzenlemeler olması gerekiyor nasıl özel bağlıdır.

Eğer bir kullanıcı bir seçenek yapmak için izin vermeden önce şimdi (hızlı erişim için bir dizi veya bir sınıfta saklamak gerekir), kullanıcıların izinleri basit bir kontrol yapın. Arama yapmanızı sağlayan bir fonksiyon için gibi bir durum kullanmak

If ($user['SearchEnabled')
{
   $generate->SearchOptions();
}
else 
{
   $generate->Error('NoSearchPermissions');
}

Using binary numbers has the obvious benefit of simply check if TRUE or FALSE. If you use a different numbering system it would require a bit more work, checking the specific value
If ($user['SearchEnabled'] == 2 || $user['SearchEnabled'] == 1)

Benim uygulamada izinleri uygulamak istiyorsa Eh, ben bu 3 yolu (Kafamın üstüne aklınıza gelebilecek) yapabilirsiniz:

  1. (Eğer bir ORM kullanıyorsanız ve rekor), kullanıcıların masaya bir seviye int koymak. Yani, örneğin bir seviye 1 kullanıcı sadece formları görüntüleyebilir, seviye 2 gönderebilir Ardından görünümlerinde sadece kullanıcı hangi seviyede görmek için kontrol ve biçimi, vb düzenleyebilirsiniz echo, 3. seviye yönetici ve, vb düzenleyebilirsiniz . (sorunuza dayanarak ben bu zaten ne yaptığını varsayalım)

    Artıları:

    • Kolay kurulum
    • Birlikte size grup izinleri sağlar.

    Eksileri:

    • Eğer 1 ve 2 arasında bir seviyeye ihtiyacınız varsa bir sürü iş yapmak zorunda. Yani, daha sonra arasındaki düzeyleri eklemek zordur.
  2. Kullanıcıların tablo ile izinleri tablo katılın. Temelde ne diğer answerer Bu Konuya nitelendirdi.

    Artıları:

    • Sen seviyelere sınırlı değildir, siz istediğiniz gibi arasındaki gibi birçok düzeyleri ekleyebilirsiniz.
    • Sen her kullanıcı yapabilmek olmak istiyorum ne ince ayar yapabilirsiniz.

    Eksileri:

    • Sen grup izinleri yapamam, ama isterseniz sadece hepsini bir kerede atayabilirsiniz varsayalım.
    • Bu, sadece tüm izinleri listelemek ya da bir yönetici olup olmadığını belirlemek için büyük bir geçiş yapabilir çünkü ne s / o bir kullanıcı anlatmak için daha fazla iş var. (Ör: Ben normal bir kullanıcı değilim de ben arama formları düzenlemek olamaz, ama?)
  3. Bu birleştirin, böylece temelde kullanıcı masanın üstünde, "admin" gibi değerleri vardı bir dize olabilir ve onlar bir yönetici veya değilse her sayfada sadece bakmak.

    Artıları:

    • Eğer wak şey dışarı atma olmadan istediğiniz kadar birçok kez ekleyebilirsiniz. "Süper yönetici" veya "biraz daha az yönetici" gibi Türleri

    Eksileri:

    • Her kullanıcı ince ayar iseniz, hızlı, yeni kullanıcı türleri bir sürü ile sona erecekti.
    • Yeni kullanıcı türü dizeleri ekleyerek kullanıcı türü dize tablo izinleri masaya katıldı sürece, zor olabilir, ama şimdi oldukça karmaşık alıyorsanız.