diff options
author | crupest <crupest@outlook.com> | 2020-12-17 23:49:16 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-17 23:49:16 +0800 |
commit | ebc2892d1546b8b59bd1c9adabe8a96a2e2a0754 (patch) | |
tree | f27b279237a6a7ab3b6a09206f3fec6a5524674b /BackEnd/Timeline/Services/UserPermissionService.cs | |
parent | b0ee9afddd4f7ecf8a183ab8d8e9e575324a2b68 (diff) | |
parent | d452781c81e6d19076cf9d356877e154b2e34e91 (diff) | |
download | timeline-ebc2892d1546b8b59bd1c9adabe8a96a2e2a0754.tar.gz timeline-ebc2892d1546b8b59bd1c9adabe8a96a2e2a0754.tar.bz2 timeline-ebc2892d1546b8b59bd1c9adabe8a96a2e2a0754.zip |
Merge pull request #192 from crupest/highlight-timeline
Highlight timeline.
Diffstat (limited to 'BackEnd/Timeline/Services/UserPermissionService.cs')
-rw-r--r-- | BackEnd/Timeline/Services/UserPermissionService.cs | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/BackEnd/Timeline/Services/UserPermissionService.cs b/BackEnd/Timeline/Services/UserPermissionService.cs index 9683000a..bd7cd6aa 100644 --- a/BackEnd/Timeline/Services/UserPermissionService.cs +++ b/BackEnd/Timeline/Services/UserPermissionService.cs @@ -28,7 +28,7 @@ namespace Timeline.Services /// <summary>
/// Represents a user's permissions.
/// </summary>
- public class UserPermissions : IEnumerable<UserPermission>
+ public class UserPermissions : IEnumerable<UserPermission>, IEquatable<UserPermissions>
{
public static UserPermissions AllPermissions { get; } = new UserPermissions(Enum.GetValues<UserPermission>());
@@ -49,10 +49,10 @@ namespace Timeline.Services public UserPermissions(IEnumerable<UserPermission> permissions)
{
if (permissions == null) throw new ArgumentNullException(nameof(permissions));
- _permissions = new HashSet<UserPermission>(permissions);
+ _permissions = new SortedSet<UserPermission>(permissions);
}
- private readonly HashSet<UserPermission> _permissions = new();
+ private readonly SortedSet<UserPermission> _permissions = new();
/// <summary>
/// Check if a permission is contained in the list.
@@ -108,6 +108,33 @@ namespace Timeline.Services {
return ((IEnumerable)_permissions).GetEnumerator();
}
+
+ public bool Equals(UserPermissions? other)
+ {
+ if (other == null)
+ return false;
+
+ return _permissions.SequenceEqual(other._permissions);
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as UserPermissions);
+ }
+
+ public override int GetHashCode()
+ {
+ int result = 0;
+ foreach (var permission in Enum.GetValues<UserPermission>())
+ {
+ if (_permissions.Contains(permission))
+ {
+ result += 1;
+ }
+ result <<= 1;
+ }
+ return result;
+ }
}
public interface IUserPermissionService
|