<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege in Management &amp; Governance</title>
    <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1758455#M16871</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/47469"&gt;@Levi_Turner&lt;/a&gt;&amp;nbsp;, I wanted to follow up. If you get a chance, would you please let me know if what I wrote in my previous reply is a correct understanding?&lt;/P&gt;</description>
    <pubDate>Wed, 04 Nov 2020 14:32:05 GMT</pubDate>
    <dc:creator>mbespartochnyy</dc:creator>
    <dc:date>2020-11-04T14:32:05Z</dc:date>
    <item>
      <title>What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege?</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756451#M16830</link>
      <description>&lt;P&gt;I'm working on default security rule named &lt;STRONG&gt;Stream&lt;/STRONG&gt;. Here's the link to Qlik's support documentation to the exact rule that I'm referring to:&lt;/P&gt;&lt;P&gt;&lt;A href="https://help.qlik.com/en-US/sense/June2019/Subsystems/ManagementConsole/Content/Sense_QMC/preinstalled-QMC-security-rules.htm#anchor-54" target="_blank"&gt;https://help.qlik.com/en-US/sense/June2019/Subsystems/ManagementConsole/Content/Sense_QMC/preinstalled-QMC-security-rules.htm#anchor-54&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Condition of that rule references two seemingly same things but they are written differently. The fact that they are written differently makes me think that there is a difference between them.&lt;/P&gt;&lt;P&gt;Does anyone know if there is a difference between&amp;nbsp;&lt;STRONG&gt;resource.stream.HasPrivilege("Read")&lt;/STRONG&gt; and &lt;STRONG&gt;resource.&lt;FONT color="#FF0000"&gt;app.&lt;/FONT&gt;stream.HasPrivilege("Read")&lt;/STRONG&gt;? And if there is a difference, does anyone know what that difference is?&lt;/P&gt;</description>
      <pubDate>Sat, 16 Nov 2024 17:54:44 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756451#M16830</guid>
      <dc:creator>mbespartochnyy</dc:creator>
      <dc:date>2024-11-16T17:54:44Z</dc:date>
    </item>
    <item>
      <title>Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756478#M16831</link>
      <description>&lt;P&gt;I believe&lt;STRONG&gt; resource.stream.HasPrivilege("Read")&amp;nbsp;&lt;/STRONG&gt;is for the stream itself and&amp;nbsp;&lt;STRONG&gt;resource.&lt;FONT color="#FF0000"&gt;app.&lt;/FONT&gt;stream.HasPrivilege("Read")&amp;nbsp;&lt;/STRONG&gt;are for items published within the stream.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Because you could technically have a security rule that says that Person has access to Stream which contains App1 and App2 but they only can access App1 and not App2.&lt;/P&gt;</description>
      <pubDate>Tue, 27 Oct 2020 21:51:10 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756478#M16831</guid>
      <dc:creator>Nicole-Smith</dc:creator>
      <dc:date>2020-10-27T21:51:10Z</dc:date>
    </item>
    <item>
      <title>Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756486#M16832</link>
      <description>&lt;P&gt;I see. So a "stream" is an attribute that is available at at least two different levels - at a stream level and at an app level. In other words, stream is a resource in and of itself, but each published app is also assigned to a stream, enabling evaluation of read rights at both stream and combination of app and stream levels.&lt;/P&gt;&lt;P&gt;To go along with your example, in a case when user has access to a stream and only to App1,&amp;nbsp;&lt;STRONG&gt;resource.stream.HasPrivilege("Read")&lt;/STRONG&gt;&amp;nbsp;will evaluate to &lt;FONT color="#339966"&gt;&lt;STRONG&gt;true&lt;/STRONG&gt; &lt;/FONT&gt;for stream that a user has access to.&amp;nbsp;&lt;STRONG&gt;resource.&lt;FONT color="#FF0000"&gt;app.&lt;/FONT&gt;stream.HasPrivilege("Read")&lt;/STRONG&gt;&amp;nbsp;will also evaluate to &lt;FONT color="#339966"&gt;&lt;STRONG&gt;true&lt;/STRONG&gt; &lt;/FONT&gt;for a combination of stream and&amp;nbsp;&lt;STRONG&gt;App1&lt;/STRONG&gt;, but it will evaluate to &lt;FONT color="#FF9900"&gt;&lt;STRONG&gt;false&lt;/STRONG&gt; &lt;/FONT&gt;for a combination of stream and&amp;nbsp;&lt;STRONG&gt;App2&lt;/STRONG&gt;&amp;nbsp;(because there's some other rule in place that allows user to have access only to App1).&lt;/P&gt;&lt;P&gt;Is that right?&lt;/P&gt;</description>
      <pubDate>Tue, 27 Oct 2020 22:27:58 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756486#M16832</guid>
      <dc:creator>mbespartochnyy</dc:creator>
      <dc:date>2020-10-27T22:27:58Z</dc:date>
    </item>
    <item>
      <title>Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756642#M16838</link>
      <description>&lt;P&gt;You've stumbled on the best rule to illustrate how things work&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":grinning_face:"&gt;😀&lt;/span&gt;.&lt;/P&gt;&lt;P&gt;tl;dr there&amp;nbsp;&lt;EM&gt;is&lt;/EM&gt; a difference. The difference is from the type of thing the rule is scoping to and the syntax is from the hierarchy of the thing (objects are in apps which are in streams).&lt;/P&gt;&lt;P&gt;First, let's do an introduction to rules. All rules have 4 components:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;A filter&lt;/LI&gt;&lt;LI&gt;An action or set of actions&lt;/LI&gt;&lt;LI&gt;A condition or set of conditions&lt;/LI&gt;&lt;LI&gt;A context&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;A filter defines what type of thing the rule will be against. For the&amp;nbsp;&lt;STRONG&gt;Stream&lt;/STRONG&gt; rule the filter is&amp;nbsp;&lt;STRONG&gt;App*&lt;/STRONG&gt;. This is a great working example since it shows the power of wildcards.&amp;nbsp;&lt;STRONG&gt;App*&lt;/STRONG&gt; scopes to two types of things&amp;nbsp;&lt;STRONG&gt;App_*&lt;/STRONG&gt; (all apps) and&amp;nbsp;&lt;STRONG&gt;App.Object_*&lt;/STRONG&gt; (all objects like stories, sheets, bookmarks, load scripts, etc).&lt;/P&gt;&lt;P&gt;Actions are straight-forward since they scope to the types of activities the users who fulfill the conditions can do against the types of things defined in the filter.&lt;/P&gt;&lt;P&gt;Conditions are used to qualify both the types of things (filter) as well as the types of users.&lt;/P&gt;&lt;P&gt;Context is the place where the rule is parsed (Hub, QMC, Both).&lt;/P&gt;&lt;P&gt;Back to your question, the Stream rule is as follows:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;Filter: App*
Actions: Read:
Conditions: (resource.resourcetype = "App" and resource.stream.HasPrivilege("read")) or ((resource.resourcetype = "App.Object" and resource.published ="true" and resource.objectType != "app_appscript" and resource.objectType != "loadmodel") and resource.app.stream.HasPrivilege("read"))
Context: Both&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The first clause is this:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;(resource.resourcetype = "App" and resource.stream.HasPrivilege("read"))&lt;/LI-CODE&gt;&lt;P&gt;The way of semantically describing this rule is:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&amp;nbsp;For all resources (&lt;STRONG&gt;App*&lt;/STRONG&gt;) which are Apps, grant read access to the App is the user has read rights on the Stream.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Apps are members of streams and&amp;nbsp;&lt;STRONG&gt;resource&lt;/STRONG&gt; is an&amp;nbsp;&lt;STRONG&gt;App&lt;/STRONG&gt; based on the&amp;nbsp;&lt;STRONG&gt;resource.resourcetype&lt;/STRONG&gt; qualification.&lt;/P&gt;&lt;P&gt;The second clause is this:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;((resource.resourcetype = "App.Object" and resource.published ="true" and resource.objectType != "app_appscript" and resource.objectType != "loadmodel") and resource.app.stream.HasPrivilege("read"))&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The way of semantically describing this rule is:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;For all resources (&lt;STRONG&gt;App*&lt;/STRONG&gt;) which are App.Objects, grant read access to all published and approved objects which are in apps which are in streams the user has read rights on.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Since App.Objects are members of Apps which are members of streams, you'd use&amp;nbsp;&lt;STRONG&gt;resource.app.stream&lt;/STRONG&gt; to transverse that hierarchy.&amp;nbsp;&lt;STRONG&gt;resource&lt;/STRONG&gt; here is an&amp;nbsp;&lt;STRONG&gt;App.Object&lt;/STRONG&gt; so you need to declare the next part (&lt;STRONG&gt;app&lt;/STRONG&gt;) to have access to the stream relationship.&lt;/P&gt;&lt;P&gt;For another way of consuming this information, please refer to my session on rules:&amp;nbsp;&lt;A href="https://youtu.be/h5nBdt969XI?t=479" target="_blank"&gt;https://youtu.be/h5nBdt969XI?t=479&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Great, (hopefully) I've made this clear. The next question is what kind of hierarchies exist? Well, most are obvious like streams &amp;gt; apps &amp;gt; objects. For more obscure ones, I find it easiest to reference the&amp;nbsp;&lt;STRONG&gt;GET /qrs/about/api/relations&lt;/STRONG&gt; endpoint in the Repository Service (&lt;A href="https://help.qlik.com/en-US/sense-developer/September2020/APIs/RepositoryServiceAPI/index.html?page=1524" target="_blank"&gt;https://help.qlik.com/en-US/sense-developer/September2020/APIs/RepositoryServiceAPI/index.html?page=1524&lt;/A&gt;). The response is:&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;[
  "App.owner &amp;gt; User",
  "App.stream &amp;gt; Stream",
  "App.tags &amp;gt; Tag",
  "App.Content.app &amp;gt; App",
  "App.Content.references &amp;gt; StaticContentReference",
  "App.Content.whiteList &amp;gt; FileExtensionWhiteList",
  "App.DataSegment.app &amp;gt; App",
  "App.DataSegment.file &amp;gt; FileReference",
  "App.DataSegment.owner &amp;gt; User",
  "App.Internal.app &amp;gt; App",
  "App.Internal.file &amp;gt; FileReference",
  "App.Object.app &amp;gt; App",
  "App.Object.file &amp;gt; FileReference",
  "App.Object.owner &amp;gt; User",
  "App.Object.tags &amp;gt; Tag",
  "AppSeedInfo.app &amp;gt; App",
  "AppStatus.app &amp;gt; App",
  "CompositeEvent.externalProgramTask &amp;gt; ExternalProgramTask",
  "CompositeEvent.operational &amp;gt; CompositeEventOperational",
  "CompositeEvent.reloadTask &amp;gt; ReloadTask",
  "CompositeEvent.userSyncTask &amp;gt; UserSyncTask",
  "CompositeEvent.Rule.externalProgramTask &amp;gt; ExternalProgramTask",
  "CompositeEvent.Rule.operational &amp;gt; CompositeEventRuleOperational",
  "CompositeEvent.Rule.reloadTask &amp;gt; ReloadTask",
  "CompositeEvent.Rule.userSyncTask &amp;gt; UserSyncTask",
  "ContentLibrary.owner &amp;gt; User",
  "ContentLibrary.references &amp;gt; StaticContentReference",
  "ContentLibrary.tags &amp;gt; Tag",
  "ContentLibrary.whiteList &amp;gt; FileExtensionWhiteList",
  "CustomPropertyValue.definition &amp;gt; CustomPropertyDefinition",
  "DataConnection.owner &amp;gt; User",
  "DataConnection.tags &amp;gt; Tag",
  "EngineService.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "EngineService.tags &amp;gt; Tag",
  "ExecutionResult.details &amp;gt; ExecutionResult.Detail",
  "ExecutionSession.app &amp;gt; App",
  "ExecutionSession.executingNode &amp;gt; SchedulerService",
  "ExecutionSession.executionResult &amp;gt; ExecutionResult",
  "ExecutionSession.externalProgramTask &amp;gt; ExternalProgramTask",
  "ExecutionSession.reloadTask &amp;gt; ReloadTask",
  "ExecutionSession.userSyncTask &amp;gt; UserSyncTask",
  "Extension.owner &amp;gt; User",
  "Extension.references &amp;gt; StaticContentReference",
  "Extension.tags &amp;gt; Tag",
  "Extension.whiteList &amp;gt; FileExtensionWhiteList",
  "ExternalProgramTask.operational &amp;gt; ExternalProgramTaskOperational",
  "ExternalProgramTask.qlikUser &amp;gt; User",
  "ExternalProgramTask.tags &amp;gt; Tag",
  "ExternalProgramTaskOperational.lastExecutionResult &amp;gt; ExecutionResult",
  "FileExtension.mimeType &amp;gt; MimeType",
  "FileExtensionWhiteList.fileExtensions &amp;gt; FileExtension",
  "License.AnalyzerAccessType.user &amp;gt; User",
  "License.AnalyzerAccessUsage.analyzerAccessType &amp;gt; License.AnalyzerAccessType",
  "License.AnalyzerTimeAccessUsage.analyzerTimeAccessType &amp;gt; License.AnalyzerTimeAccessType",
  "License.AnalyzerTimeAccessUsage.user &amp;gt; User",
  "License.LoginAccessUsage.loginAccessType &amp;gt; License.LoginAccessType",
  "License.LoginAccessUsage.user &amp;gt; User",
  "License.ProfessionalAccessType.user &amp;gt; User",
  "License.ProfessionalAccessUsage.professionalAccessType &amp;gt; License.ProfessionalAccessType",
  "License.UserAccessType.user &amp;gt; User",
  "License.UserAccessUsage.userAccessType &amp;gt; License.UserAccessType",
  "OdagEngineGroup.owner &amp;gt; User",
  "OdagLink.modelGroups &amp;gt; OdagModelGroup",
  "OdagLink.owner &amp;gt; User",
  "OdagLink.templateApp &amp;gt; App",
  "OdagLinkUsage.link &amp;gt; OdagLink",
  "OdagLinkUsage.selectionApp &amp;gt; App",
  "OdagModelGroup.owner &amp;gt; User",
  "OdagRequest.engineGroup &amp;gt; OdagEngineGroup",
  "OdagRequest.generatedApp &amp;gt; App",
  "OdagRequest.link &amp;gt; OdagLink",
  "OdagRequest.owner &amp;gt; User",
  "OdagService.Settings.anonymousProxyUser &amp;gt; User",
  "PrintingService.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "PrintingService.tags &amp;gt; Tag",
  "ProxyService.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "ProxyService.tags &amp;gt; Tag",
  "ProxyServiceCertificate.proxyService &amp;gt; ProxyService",
  "ProxyService.Settings.virtualProxies &amp;gt; VirtualProxyConfig",
  "ReloadTask.app &amp;gt; App",
  "ReloadTask.operational &amp;gt; ReloadTaskOperational",
  "ReloadTask.tags &amp;gt; Tag",
  "ReloadTaskOperational.lastExecutionResult &amp;gt; ExecutionResult",
  "RepositoryService.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "RepositoryService.tags &amp;gt; Tag",
  "SchedulerService.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "SchedulerService.tags &amp;gt; Tag",
  "SchemaEvent.externalProgramTask &amp;gt; ExternalProgramTask",
  "SchemaEvent.operational &amp;gt; SchemaEventOperational",
  "SchemaEvent.reloadTask &amp;gt; ReloadTask",
  "SchemaEvent.userSyncTask &amp;gt; UserSyncTask",
  "ServerNodeConfiguration.roles &amp;gt; ServerNodeRole",
  "ServerNodeConfiguration.serviceCluster &amp;gt; ServiceCluster",
  "ServerNodeConfiguration.tags &amp;gt; Tag",
  "ServerNodeHeartbeat.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "ServiceStatus.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "SharedContent.owner &amp;gt; User",
  "SharedContent.references &amp;gt; StaticContentReference",
  "SharedContent.tags &amp;gt; Tag",
  "SharedContent.whiteList &amp;gt; FileExtensionWhiteList",
  "StaticContentReference.files &amp;gt; FileReference",
  "Stream.owner &amp;gt; User",
  "Stream.tags &amp;gt; Tag",
  "SyncSession.serverNodeConfiguration &amp;gt; ServerNodeConfiguration",
  "SystemNotification.reloadTasks &amp;gt; ReloadTask",
  "SystemNotification.targetUsers &amp;gt; User",
  "SystemRule.tags &amp;gt; Tag",
  "TempContent.owner &amp;gt; User",
  "TermsAcceptance.user &amp;gt; User",
  "User.tags &amp;gt; Tag",
  "UserDirectory.tags &amp;gt; Tag",
  "UserSyncTask.operational &amp;gt; UserSyncTaskOperational",
  "UserSyncTask.tags &amp;gt; Tag",
  "UserSyncTask.userDirectory &amp;gt; UserDirectory",
  "UserSyncTaskOperational.lastExecutionResult &amp;gt; ExecutionResult",
  "VirtualProxyConfig.loadBalancingServerNodes &amp;gt; ServerNodeConfiguration",
  "VirtualProxyConfig.tags &amp;gt; Tag",
  "WebExtensionLibrary.owner &amp;gt; User",
  "WebExtensionLibrary.tags &amp;gt; Tag",
  "Widget.extensionType &amp;gt; WebExtensionType",
  "Widget.library &amp;gt; WebExtensionLibrary",
  "Widget.owner &amp;gt; User",
  "Widget.tags &amp;gt; Tag"
]&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;From there we can see the hierarchies which are available for you to traverse if needed.&lt;/P&gt;&lt;P&gt;Hope that is as clear as it can be.&lt;/P&gt;</description>
      <pubDate>Wed, 28 Oct 2020 12:31:56 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756642#M16838</guid>
      <dc:creator>Levi_Turner</dc:creator>
      <dc:date>2020-10-28T12:31:56Z</dc:date>
    </item>
    <item>
      <title>Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756879#M16841</link>
      <description>&lt;P&gt;This sheds so much light on it. Thanks for taking time to reply and provide the details, &lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/47469"&gt;@Levi_Turner&lt;/a&gt;&amp;nbsp;! I read through your reply, watched your presentation and had to take a bit of time to mull it over, but I think I understood it now.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Slight Detour For Context&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;It looks like conditions, specifically in the case of security rule named&amp;nbsp;&lt;STRONG&gt;Stream&lt;/STRONG&gt;, are operating more like extensions to the resource filter. In other words, we can't really select all but two types of app objects in apps that are in streams that a user has read access to. In resource filter, we do have flexibility to select many different resources, but we do not have flexibility to make selections of things like app objects that are not script or data model. In resource filter we can select all app objects or a single app object, but if we want to make selections of all except for some, we have to combine resource filter with conditions to get us down to specific list of resources that we're after.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Back to the Topic&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;FONT color="#999999"&gt;&lt;STRONG&gt;First clause&lt;BR /&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size="3"&gt;If I understood purpose of conditions in&amp;nbsp;&lt;STRONG&gt;Stream&lt;/STRONG&gt; rule correctly, implication is that when&amp;nbsp;&lt;STRONG&gt;App*&lt;/STRONG&gt; is provided as resource filter, what returned is an object ("object" in JavaScript terms) with bunch of properties. One of the properties is&amp;nbsp;&lt;STRONG&gt;resourcetype&lt;/STRONG&gt;. This property holds values that separates &lt;EM&gt;app&lt;/EM&gt; from &lt;EM&gt;app objects&lt;/EM&gt; and &lt;EM&gt;app data segments&lt;/EM&gt; and &lt;EM&gt;app contents&lt;/EM&gt; and all other things that are associated with an app. In the&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;resource.resourcetype = "App"&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;piece of condition then, we use say, "reduce everything that is returned by&amp;nbsp;&lt;STRONG&gt;App*&lt;/STRONG&gt; resource filter down to just the 'App'." Moreover, having &lt;FONT face="courier new,courier"&gt;resource.resourcetype = "App"&lt;/FONT&gt; specified, the definition of "resource" in&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;resource.stream.HasPrivilege("read")&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;piece was &lt;STRONG&gt;changed to "App"&lt;/STRONG&gt;. So in other word the &lt;FONT face="courier new,courier"&gt;resource.stream.HasPrivilege("Read")&lt;/FONT&gt; essentially now is &lt;FONT face="courier new,courier"&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;App&lt;/STRONG&gt;&lt;/FONT&gt;.stream.HasPrivilege("Read")&lt;/FONT&gt;. &lt;STRONG&gt;Is that right?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color="#999999"&gt;Second Clause&lt;BR /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color="#000000"&gt;In the second clause, the&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;resource.resourcetype = "App.Object"&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;piece filters out everything returned by&amp;nbsp;&lt;STRONG&gt;App*&lt;/STRONG&gt; filter down to app objects and it also assign definition of resource to be "app object". Then with "&lt;FONT face="courier new,courier"&gt;resource&lt;/FONT&gt;" redefined, we're tapping into properties of app object like &lt;FONT face="courier new,courier"&gt;objectType&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;published&lt;/FONT&gt;. And when it comes to &lt;FONT face="courier new,courier"&gt;resource.app.stream.HasPrivilege("Read")&lt;/FONT&gt;, because resource has been redefined to mean app object, which is not directly associated with streams, we use &lt;FONT face="courier new,courier"&gt;app&lt;/FONT&gt; property and it's association with stream to evaluate whether a user has access to a stream in which an app is published that holds app objects that we're granting access to.&lt;/P&gt;&lt;P&gt;Based on all I've read and videos, including yours, that I've watched that seems to be what's going on in those condition clauses and what the difference is between resource.stream.HasPrivilege and resource.&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;app.&lt;/FONT&gt;&lt;/STRONG&gt;stream.HasPrivilege. Is that correct or did I misunderstood it in any way?&lt;/P&gt;</description>
      <pubDate>Wed, 28 Oct 2020 21:43:21 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1756879#M16841</guid>
      <dc:creator>mbespartochnyy</dc:creator>
      <dc:date>2020-10-28T21:43:21Z</dc:date>
    </item>
    <item>
      <title>Re: What is the difference between resource.stream.HasPrivilege and resource.app.stream.HasPrivilege</title>
      <link>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1758455#M16871</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/47469"&gt;@Levi_Turner&lt;/a&gt;&amp;nbsp;, I wanted to follow up. If you get a chance, would you please let me know if what I wrote in my previous reply is a correct understanding?&lt;/P&gt;</description>
      <pubDate>Wed, 04 Nov 2020 14:32:05 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Management-Governance/What-is-the-difference-between-resource-stream-HasPrivilege-and/m-p/1758455#M16871</guid>
      <dc:creator>mbespartochnyy</dc:creator>
      <dc:date>2020-11-04T14:32:05Z</dc:date>
    </item>
  </channel>
</rss>

