浏览代码

Fix permission setting on Channels

Currently, permission settings on Channels are not taken into account prior to returning `{UserName} is not permitted to access Library {ItemName}.`.  Whether or not a user can see items within the Channel is solely dependent on `EnableAllFolders`, so you cannot view a plugin's Channels unless you can also see ALL libraries.

This PR enables does two things for Channel-providing Plugins:
1. Fixes functionality of "EnableAllChannels"
2. Allows users with Channel permissions to access all folders within that Channel

I'm not 100% sure on 2 but I wasn't able to see an obvious way to propagate permissions downward into specific Folders inside a Channel.

I tested on a fairly simple library with two channel-providing plugins (ServerWMC, LazyMan) and it seems to work, but this behavior should also be tested by someone with more content/collections.
PrplHaz4 5 年之前
父节点
当前提交
025888204d
共有 1 个文件被更改,包括 5 次插入1 次删除
  1. 5 1
      MediaBrowser.Api/UserLibrary/ItemsService.cs

+ 5 - 1
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -214,6 +214,10 @@ namespace MediaBrowser.Api.UserLibrary
             }
 
             bool isInEnabledFolder = user.Policy.EnabledFolders.Any(i => new Guid(i) == item.Id);
+            
+            // Assume all folders inside an EnabledChannel are enabled
+            isInEnabledFolder = isInEnabledFolder || user.Policy.EnabledChannels.Any(i => new Guid(i) == item.Id);
+
             var collectionFolders = _libraryManager.GetCollectionFolders(item);
             foreach (var collectionFolder in collectionFolders)
             {
@@ -225,7 +229,7 @@ namespace MediaBrowser.Api.UserLibrary
                 }
             }
 
-            if (!(item is UserRootFolder) && !user.Policy.EnableAllFolders && !isInEnabledFolder)
+            if (!(item is UserRootFolder) && !user.Policy.EnableAllFolders && !isInEnabledFolder && !user.Policy.EnableAllChannels)
             {
                 Logger.LogWarning("{UserName} is not permitted to access Library {ItemName}.", user.Name, item.Name);
                 return new QueryResult<BaseItem>