浏览代码

Safely set/get user permission

Cody Robibero 3 年之前
父节点
当前提交
6f45848b51
共有 1 个文件被更改,包括 33 次插入9 次删除
  1. 33 9
      Jellyfin.Data/Entities/User.cs

+ 33 - 9
Jellyfin.Data/Entities/User.cs

@@ -362,7 +362,7 @@ namespace Jellyfin.Data.Entities
         /// <returns><c>True</c> if the user has the specified permission.</returns>
         public bool HasPermission(PermissionKind kind)
         {
-            return Permissions.First(p => p.Kind == kind).Value;
+            return Permissions.FirstOrDefault(p => p.Kind == kind)?.Value ?? false;
         }
 
         /// <summary>
@@ -372,7 +372,15 @@ namespace Jellyfin.Data.Entities
         /// <param name="value">The value to set.</param>
         public void SetPermission(PermissionKind kind, bool value)
         {
-            Permissions.First(p => p.Kind == kind).Value = value;
+            var currentPermission = Permissions.FirstOrDefault(p => p.Kind == kind);
+            if (currentPermission == null)
+            {
+                Permissions.Add(new Permission(kind, value));
+            }
+            else
+            {
+                currentPermission.Value = value;
+            }
         }
 
         /// <summary>
@@ -382,9 +390,9 @@ namespace Jellyfin.Data.Entities
         /// <returns>A string array containing the user's preferences.</returns>
         public string[] GetPreference(PreferenceKind preference)
         {
-            var val = Preferences.First(p => p.Kind == preference).Value;
+            var val = Preferences.FirstOrDefault(p => p.Kind == preference)?.Value;
 
-            return Equals(val, string.Empty) ? Array.Empty<string>() : val.Split(Delimiter);
+            return string.IsNullOrEmpty(val) ? Array.Empty<string>() : val.Split(Delimiter);
         }
 
         /// <summary>
@@ -395,7 +403,7 @@ namespace Jellyfin.Data.Entities
         /// <returns>A {T} array containing the user's preference.</returns>
         public T[] GetPreferenceValues<T>(PreferenceKind preference)
         {
-            var val = Preferences.First(p => p.Kind == preference).Value;
+            var val = Preferences.FirstOrDefault(p => p.Kind == preference)?.Value;
             if (string.IsNullOrEmpty(val))
             {
                 return Array.Empty<T>();
@@ -432,8 +440,16 @@ namespace Jellyfin.Data.Entities
         /// <param name="values">The values.</param>
         public void SetPreference(PreferenceKind preference, string[] values)
         {
-            Preferences.First(p => p.Kind == preference).Value
-                = string.Join(Delimiter, values);
+            var value = string.Join(Delimiter, values);
+            var currentPreference = Preferences.FirstOrDefault(p => p.Kind == preference);
+            if (currentPreference == null)
+            {
+                Preferences.Add(new Preference(preference, value));
+            }
+            else
+            {
+                currentPreference.Value = value;
+            }
         }
 
         /// <summary>
@@ -444,8 +460,16 @@ namespace Jellyfin.Data.Entities
         /// <typeparam name="T">The type of value.</typeparam>
         public void SetPreference<T>(PreferenceKind preference, T[] values)
         {
-            Preferences.First(p => p.Kind == preference).Value
-                = string.Join(Delimiter, values);
+            var value = string.Join(Delimiter, values);
+            var currentPreference = Preferences.FirstOrDefault(p => p.Kind == preference);
+            if (currentPreference == null)
+            {
+                Preferences.Add(new Preference(preference, value));
+            }
+            else
+            {
+                currentPreference.Value = value;
+            }
         }
 
         /// <summary>