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,9 +450,28 @@ 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) { if(!matching) {
requestedMatchesRequired = false; /* Required permissions can be 1 content type, and requestedPermisisons may send an array of content types.
break; 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) {
requestedMatchesRequired = false;
break;
}
} }
} }
@@ -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? %>