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 :)