internal static void SetBits(SenseNet.Security.PermissionBitMask permissionMask) { ulong allowBits = permissionMask.AllowBits; ulong denyBits = permissionMask.DenyBits; var perms = PermissionType.PermissionTypes.ToArray(); var values = new SenseNet.Security.PermissionValue[perms.Length]; foreach (var perm in perms) { values[perm.Index] = GetValue(allowBits, denyBits, perm); } foreach (var perm in perms) { if (values[perm.Index] == SenseNet.Security.PermissionValue.Allowed) { SetBits(ref allowBits, ref denyBits, perm, SenseNet.Security.PermissionValue.Allowed); } } foreach (var perm in perms) { if (values[perm.Index] == SenseNet.Security.PermissionValue.Denied) { SetBits(ref allowBits, ref denyBits, perm, SenseNet.Security.PermissionValue.Denied); } } permissionMask.AllowBits = allowBits; permissionMask.DenyBits = denyBits; }
/// <summary> /// Sets the allowed and denied permissions by the passed bitmask. /// This method can not reset any allowed or denied. /// </summary> /// <param name="entityId">The requested entity.</param> /// <param name="identityId">The requested identity.</param> /// <param name="localOnly">Determines whether the edited entry is inheritable or not.</param> /// <param name="permissionMask">Contains one or more permissions to allow or deny.</param> /// <returns>A reference to this instance for calling more operations.</returns> public new SnAclEditor Set(int entityId, int identityId, bool localOnly, SenseNet.Security.PermissionBitMask permissionMask) { SetBits(permissionMask); base.Set(entityId, identityId, localOnly, permissionMask); return(this); }
/// <summary> /// Resets the allowed and denied permissions by the passed bitmask. /// </summary> /// <param name="entityId">The requested entity.</param> /// <param name="identityId">The requested identity.</param> /// <param name="localOnly">Determines whether the edited entry is inheritable or not.</param> /// <param name="permissionMask">Contains one or more permissions to allow or deny.</param> /// <returns>A reference to this instance for calling more operations.</returns> public new SnAclEditor Reset(int entityId, int identityId, bool localOnly, SenseNet.Security.PermissionBitMask permissionMask) { var permissionsToReset = new List <SenseNet.Security.PermissionTypeBase>(); var bits = permissionMask.AllowBits | permissionMask.DenyBits; for (var i = 0; i < PermissionType.PermissionCount; i++) { if ((bits & (1uL << i)) != 0) { permissionsToReset.Add(PermissionType.GetByIndex(i)); } } ClearPermission(entityId, identityId, localOnly, permissionsToReset.ToArray()); return(this); }