PHP: matematik ile rollerini yönetme?

2 Cevap php

Bir keresinde rolleri yönetmek için numaralandırma sistemi belirli bir tip nasıl kullanılacağı hakkında bir makale gördüm. Bir kullanıcı belirli bir rol numara atanmış olacağını ve bir hesaplamada bağlı olarak, sayı birden roller için duramazdı.

Kimse benimle bu tekniği paylaşmak veya bir link paylaşabilir miyim? Teşekkürler!

2 Cevap

Bu bir bit maskesi. Bu gibi çalışır: Eğer bir kullanıcıya bir rol atamak istediğiniz zaman sonra, bu rolü sayısını almak, her role ilerici bir numara atayın. Eğer başka bir rol eklemek istiyorsanız, sadece özgün bir o rol numara ekleyebilirsiniz. Siz istediğiniz gibi birçok rolleri ekleyebilirsiniz. Hüner sizin numaraları seçmek ne kadar: onlar 2 güçler vardır.

İşte bir örnek:

Role: Editor.     Value: 2^0 = 1
Role: Manager.    Value: 2^1 = 2
Role: Supervisor. Value: 2^2 = 4
Role: Admin.      Value: 2^3 = 8
...

To give a user the role of Editor, you save 1 to the database, To give a user the roles of Editor, Manager and Admin you save 1 + 2 + 8 = 11

Neden bu işleri 1 veya 0 değerleri bir dizi olarak görüyorum eğer görebilirsiniz.

|__|__|__|__|__|__|
    16  8  4  2  1 

Her rol tekabül yuvaya 1 olduğunu. Yani bizim 11 durumdur:

|__|__|_1|_0|_1|_1|
    16  8  4  2  1 

Eğer bir bit maskesi var ve kullanıcı belirli bir rolü olup olmadığını bilmek istiyorsanız, bu işlemi kullanabilirsiniz:

(Bitmask ve role_value)> = 1

Örneğin:

(11 & 8) >= 1? yes, so the user has the admin role
(11 & 4) >= 1? no, so the user has not the supervisor role

Ne yapıyorsun ", yani," bir 1 var, belirli bir konumda olup olmadığını kontrol edin "sen, biri dışında (0'a set) tüm yerleri maske bir maske uygulamak çünkü, bir bit maskesi denir ) arıyor:

11 --> |__|__|_1|_0|_1|_1|
           16  8  4  2  1 
 8 --> |__|__|_1|_0|_0|_0|  (mask)
           16  8  4  2  1 
AND -> |__|__|_1|_0|_0|_0|  Result: Yes

Bu yardımcı umut :)

i "bit bayrakları" duymuş düşünüyorum. Ben bunun için iyi bir İngilizce turorial (ben Almanca bilmiyorum) - ama google size bazı güzel bağlantılar verecektir düşünüyorum.