2
0
Эх сурвалжийг харах

enforce user access to offline items

Luke Pulverenti 10 жил өмнө
parent
commit
655c9ea7a1

+ 17 - 0
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1083,6 +1083,23 @@ namespace MediaBrowser.Controller.Entities
             return IsParentalAllowed(user);
             return IsParentalAllowed(user);
         }
         }
 
 
+        public virtual bool IsVisibleStandalone(User user)
+        {
+            if (!IsVisible(user))
+            {
+                return false;
+            }
+
+            if (Parents.Any(i => !i.IsVisible(user)))
+            {
+                return false;
+            }
+
+            // TODO: Need some work here, e.g. is in user library, for channels, can user access channel, etc.
+
+            return true;
+        }
+
         /// <summary>
         /// <summary>
         /// Gets a value indicating whether this instance is folder.
         /// Gets a value indicating whether this instance is folder.
         /// </summary>
         /// </summary>

+ 2 - 0
MediaBrowser.Model/Sync/SyncDataRequest.cs

@@ -5,12 +5,14 @@ namespace MediaBrowser.Model.Sync
     public class SyncDataRequest
     public class SyncDataRequest
     {
     {
         public List<string> LocalItemIds { get; set; }
         public List<string> LocalItemIds { get; set; }
+        public List<string> OfflineUserIds { get; set; }
 
 
         public string TargetId { get; set; }
         public string TargetId { get; set; }
 
 
         public SyncDataRequest()
         public SyncDataRequest()
         {
         {
             LocalItemIds = new List<string>();
             LocalItemIds = new List<string>();
+            OfflineUserIds = new List<string>();
         }
         }
     }
     }
 }
 }

+ 2 - 0
MediaBrowser.Model/Sync/SyncDataResponse.cs

@@ -5,10 +5,12 @@ namespace MediaBrowser.Model.Sync
     public class SyncDataResponse
     public class SyncDataResponse
     {
     {
         public List<string> ItemIdsToRemove { get; set; }
         public List<string> ItemIdsToRemove { get; set; }
+        public Dictionary<string, List<string>> ItemUserAccess { get; set; }
 
 
         public SyncDataResponse()
         public SyncDataResponse()
         {
         {
             ItemIdsToRemove = new List<string>();
             ItemIdsToRemove = new List<string>();
+            ItemUserAccess = new Dictionary<string, List<string>>();
         }
         }
     }
     }
 }
 }

+ 3 - 3
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -147,7 +147,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
                 var currentUser = user;
                 var currentUser = user;
 
 
                 channels = channels
                 channels = channels
-                    .Where(i => i.IsParentalAllowed(currentUser))
+                    .Where(i => i.IsVisible(currentUser))
                     .OrderBy(i =>
                     .OrderBy(i =>
                     {
                     {
                         double number = 0;
                         double number = 0;
@@ -679,7 +679,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
             {
             {
                 // Avoid implicitly captured closure
                 // Avoid implicitly captured closure
                 var currentUser = user;
                 var currentUser = user;
-                programs = programs.Where(i => i.IsParentalAllowed(currentUser));
+                programs = programs.Where(i => i.IsVisible(currentUser));
             }
             }
 
 
             var programList = programs.ToList();
             var programList = programs.ToList();
@@ -714,7 +714,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
 
             // Avoid implicitly captured closure
             // Avoid implicitly captured closure
             var currentUser = user;
             var currentUser = user;
-            programs = programs.Where(i => i.IsParentalAllowed(currentUser));
+            programs = programs.Where(i => i.IsVisible(currentUser));
 
 
             if (query.IsAiring.HasValue)
             if (query.IsAiring.HasValue)
             {
             {

+ 47 - 0
MediaBrowser.Server.Implementations/Sync/SyncManager.cs

@@ -314,6 +314,10 @@ namespace MediaBrowser.Server.Implementations.Sync
             try
             try
             {
             {
                 _fileSystem.DeleteDirectory(path, true);
                 _fileSystem.DeleteDirectory(path, true);
+            }
+            catch (DirectoryNotFoundException)
+            {
+
             }
             }
             catch (Exception ex)
             catch (Exception ex)
             {
             {
@@ -664,9 +668,48 @@ namespace MediaBrowser.Server.Implementations.Sync
 
 
             response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
             response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
 
 
+            var itemsOnDevice = request.LocalItemIds
+                .Except(response.ItemIdsToRemove)
+                .ToList();
+
+            SetUserAccess(request, response, itemsOnDevice);
+
             return response;
             return response;
         }
         }
 
 
+        private void SetUserAccess(SyncDataRequest request, SyncDataResponse response, List<string> itemIds)
+        {
+            var users = request.OfflineUserIds
+                .Select(_userManager.GetUserById)
+                .Where(i => i != null)
+                .ToList();
+
+            foreach (var itemId in itemIds)
+            {
+                var item = _libraryManager.GetItemById(itemId);
+
+                if (item != null)
+                {
+                    var usersWithAccess = new List<User>();
+
+                    foreach (var user in users)
+                    {
+                        if (IsUserVisible(item, user))
+                        {
+                            usersWithAccess.Add(user);
+                        }
+                    }
+
+                    response.ItemUserAccess[itemId] = users.Select(i => i.Id.ToString("N")).ToList();
+                }
+            }
+        }
+
+        private bool IsUserVisible(BaseItem item, User user)
+        {
+            return item.IsVisibleStandalone(user);
+        }
+
         private bool IsLibraryItemAvailable(BaseItem item)
         private bool IsLibraryItemAvailable(BaseItem item)
         {
         {
             if (item == null)
             if (item == null)
@@ -723,6 +766,10 @@ namespace MediaBrowser.Server.Implementations.Sync
             try
             try
             {
             {
                 _fileSystem.DeleteDirectory(path, true);
                 _fileSystem.DeleteDirectory(path, true);
+            }
+            catch (DirectoryNotFoundException)
+            {
+
             }
             }
             catch (Exception ex)
             catch (Exception ex)
             {
             {

+ 3 - 3
MediaBrowser.Server.Implementations/Sync/SyncRepository.cs

@@ -407,7 +407,6 @@ namespace MediaBrowser.Server.Implementations.Sync
                 if (!string.IsNullOrWhiteSpace(query.TargetId))
                 if (!string.IsNullOrWhiteSpace(query.TargetId))
                 {
                 {
                     whereClauses.Add("TargetId=@TargetId");
                     whereClauses.Add("TargetId=@TargetId");
-                    cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
                 }
                 }
                 if (!string.IsNullOrWhiteSpace(query.UserId))
                 if (!string.IsNullOrWhiteSpace(query.UserId))
                 {
                 {
@@ -422,7 +421,7 @@ namespace MediaBrowser.Server.Implementations.Sync
                 var startIndex = query.StartIndex ?? 0;
                 var startIndex = query.StartIndex ?? 0;
                 if (startIndex > 0)
                 if (startIndex > 0)
                 {
                 {
-                    whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY DateLastModified DESC LIMIT {0})",
+                    whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC LIMIT {0})",
                         startIndex.ToString(_usCulture)));
                         startIndex.ToString(_usCulture)));
                 }
                 }
 
 
@@ -431,7 +430,8 @@ namespace MediaBrowser.Server.Implementations.Sync
                     cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
                     cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
                 }
                 }
 
 
-                cmd.CommandText += " ORDER BY DateLastModified DESC";
+                cmd.CommandText += " ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC";
+                cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
 
 
                 if (query.Limit.HasValue)
                 if (query.Limit.HasValue)
                 {
                 {

+ 2 - 2
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Common.Internal</id>
         <id>MediaBrowser.Common.Internal</id>
-        <version>3.0.551</version>
+        <version>3.0.552</version>
         <title>MediaBrowser.Common.Internal</title>
         <title>MediaBrowser.Common.Internal</title>
         <authors>Luke</authors>
         <authors>Luke</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
         <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.551" />
+            <dependency id="MediaBrowser.Common" version="3.0.552" />
             <dependency id="NLog" version="3.1.0.0" />
             <dependency id="NLog" version="3.1.0.0" />
             <dependency id="SimpleInjector" version="2.6.1" />
             <dependency id="SimpleInjector" version="2.6.1" />
         </dependencies>
         </dependencies>

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Common</id>
         <id>MediaBrowser.Common</id>
-        <version>3.0.551</version>
+        <version>3.0.552</version>
         <title>MediaBrowser.Common</title>
         <title>MediaBrowser.Common</title>
         <authors>Media Browser Team</authors>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>

+ 1 - 1
Nuget/MediaBrowser.Model.Signed.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Model.Signed</id>
         <id>MediaBrowser.Model.Signed</id>
-        <version>3.0.551</version>
+        <version>3.0.552</version>
         <title>MediaBrowser.Model - Signed Edition</title>
         <title>MediaBrowser.Model - Signed Edition</title>
         <authors>Media Browser Team</authors>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Server.Core</id>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.551</version>
+        <version>3.0.552</version>
         <title>Media Browser.Server.Core</title>
         <title>Media Browser.Server.Core</title>
         <authors>Media Browser Team</authors>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.551" />
+            <dependency id="MediaBrowser.Common" version="3.0.552" />
         </dependencies>
         </dependencies>
     </metadata>
     </metadata>
     <files>
     <files>