This commit is contained in:
Mo Bitar
2018-01-01 10:17:09 -06:00
parent f2d88d287d
commit 095a0b29b9
5 changed files with 35 additions and 5 deletions

View File

@@ -40,3 +40,7 @@ function isDesktopApplication() {
function isMacApplication() { function isMacApplication() {
return window && window.process && window.process.type && window.process.platform == "darwin"; return window && window.process && window.process.type && window.process.platform == "darwin";
} }
Array.prototype.containsSubset = function(array) {
return !array.some(val => this.indexOf(val) === -1);
}

View File

@@ -431,7 +431,7 @@ class ComponentManager {
var requiredPermissions = [ var requiredPermissions = [
{ {
name: "stream-items", name: "stream-items",
content_types: component.content_type content_types: [component.content_type]
} }
]; ];
@@ -450,11 +450,30 @@ class ComponentManager {
for(var required of requiredPermissions) { for(var required of requiredPermissions) {
var matching = _.find(requestedPermissions, required); var matching = _.find(requestedPermissions, required);
var matching = requestedPermissions.filter((p) => {
var matchesContentTypes = true;
if(p.content_types) {
matchesContentTypes = JSON.stringify(p.content_types.sort()) == JSON.stringify(required.content_types.sort());
}
return p.name == required.name && matchesContentTypes;
})[0];
console.log("required", required, "requested", requestedPermissions, "matching", matching);
if(!matching) {
/* Required permissions can be 1 content type, and requestedPermisisons may send an array of content types.
In the case of an array, we can just check to make sure that requiredPermissions content type is found in the array
*/
matching = requestedPermissions.filter((requested) => {
return Array.isArray(requested.content_types) && requested.content_types.containsSubset(required.content_types);
});
console.log("Matching 2nd chance", matching);
if(!matching) { if(!matching) {
requestedMatchesRequired = false; requestedMatchesRequired = false;
break; break;
} }
} }
}
if(!requestedMatchesRequired) { if(!requestedMatchesRequired) {
// Error with Component permissions request // Error with Component permissions request
@@ -462,6 +481,7 @@ class ComponentManager {
return false; return false;
} }
if(!component.permissions) { if(!component.permissions) {
component.permissions = []; component.permissions = [];
} }

View File

@@ -29,6 +29,7 @@ class PermissionsModal {
} }
controller($scope, modelManager) { controller($scope, modelManager) {
console.log("permissions", $scope.permissions);
$scope.formattedPermissions = $scope.permissions.map(function(permission){ $scope.formattedPermissions = $scope.permissions.map(function(permission){
if(permission.name === "stream-items") { if(permission.name === "stream-items") {
var title = "Access to "; var title = "Access to ";
@@ -51,7 +52,7 @@ class PermissionsModal {
} else if(i == types.length - 1) { } else if(i == types.length - 1) {
// last element // last element
if(types.length > 2) { if(types.length > 2) {
typesString += separator + "and " + typesString; typesString += separator + "and " + type;
} else if(types.length == 2) { } else if(types.length == 2) {
typesString = typesString + " and " + type; typesString = typesString + " and " + type;
} }

View File

@@ -126,6 +126,11 @@ class SingletonManager {
var candidateValue = candidate[key]; var candidateValue = candidate[key];
if(typeof predicateValue == 'object') { if(typeof predicateValue == 'object') {
// Check nested properties // Check nested properties
if(!candidateValue) {
// predicateValue is 'object' but candidateValue is null
return false;
}
if(!this.itemSatisfiesPredicate(candidateValue, predicateValue)) { if(!this.itemSatisfiesPredicate(candidateValue, predicateValue)) {
return false; return false;
} }

View File

@@ -30,7 +30,7 @@
<script> <script>
window._default_sf_server = "<%= ENV['SF_DEFAULT_SERVER'] %>"; window._default_sf_server = "<%= ENV['SF_DEFAULT_SERVER'] %>";
window._prolink_package_url = "<%= ENV['PROLINK_URL'] %>"; window._prolink_package_url = "<%= ENV['PROLINK_PACKAGE_URL'] %>";
</script> </script>
<% if Rails.env.development? %> <% if Rails.env.development? %>