Common bitwise operations include (&), (|), and (~), For example:
1 & 0 = 0, 1 | 0 = 1 ,~ 1 = 0
When designing a permission, we can convert the permission management operation to a C # bitwise operation.
Step 1: Create an enumeration to indicate all permission management operations:
- [Flags]Public EnumPermissions {
- Insert = 1,
- Delete = 2,
- Update = 4,
- Query = 8}
[Flags] indicates that this enumeration can support the C # bitwise operation. For each enumerated value, we use the Npower of 2 to assign a value. In this way, when it is binary, it is exactly 1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000, etc. Each digit indicates a permission. 1 indicates that the permission is granted, and 0 indicates that no.
Next is the permission calculation:
1. The addition of permissions is implemented using the OR operation. We know that 0001 | 0100 = 0101 means that permissions with the first and third places are managed at the same time, and enumeration means:
Permissions per = permissions. Insert | permissions. Update
2. Permission Subtraction is implemented by operations + non-operations. To remove the insert permission, perform the following operations:
Permissions per & = ~ Permissions. Insert means 0101 &~ 0001 = 0101 & 1110 = 0100
3. when determining whether a user has the permission for this operation, the user's permission and operation permission should be performed and calculated, if the result is still operation permission management, the user has this permission:
- Permissions per = permissions. Insert | permissions. update;
- If(Per & permissions. Insert = permissions. insert)
- {
- // Operation permission
- }
when the comparison process is 0101 & 0001 = 0001,000, the 0 bits of 1 are set to 0 using the bitwise operation with C #, And the other bits are changed to the one that only compares 1.