Skip to content

Commit

Permalink
Fixed #1011 : fixed several bugs on permission editor (#1085)
Browse files Browse the repository at this point in the history
  • Loading branch information
MV88 authored and mbarto committed Oct 5, 2016
1 parent d121962 commit d3eed24
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 47 deletions.
1 change: 1 addition & 0 deletions web/client/actions/maps.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ function updatePermissions(resourceId, securityRules) {
return (dispatch) => {
GeoStoreApi.updateResourcePermissions(resourceId, securityRules).then(() => {
dispatch(permissionsUpdated(resourceId, "success"));
dispatch(loadMaps(false, ConfigUtils.getDefaults().initialMapFilter || "*"));
}).catch((e) => {
dispatch(thumbnailError(resourceId, e));
});
Expand Down
4 changes: 2 additions & 2 deletions web/client/components/maps/modals/MetadataModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ const MetadataModal = React.createClass({
},
componentDidUpdate(prevProps) {
if (this.props.show && !prevProps.show) {
if (this.props.displayPermissionEditor) {
if (this.props.displayPermissionEditor && (this.props.user.name === this.props.map.owner || this.props.user.role === "ADMIN" )) {
this.loadPermissions();
this.loadAvailableGroups();
}
Expand Down Expand Up @@ -157,7 +157,7 @@ const MetadataModal = React.createClass({
this.refs.thumbnail.updateThumbnail(this.props.map, metadata);
},
renderPermissionEditor() {
if (this.props.displayPermissionEditor) {
if (this.props.displayPermissionEditor && this.props.user.name === this.props.map.owner || this.props.user.role === "ADMIN" ) {
// Hack to convert map permissions to a simpler format, TODO: remove this
if (this.props.map && this.props.map.permissions && this.props.map.permissions.SecurityRuleList && this.props.map.permissions.SecurityRuleList.SecurityRule) {
this.localGroups = this.props.map.permissions.SecurityRuleList.SecurityRule.map(function(rule) {
Expand Down
25 changes: 19 additions & 6 deletions web/client/components/maps/modals/__tests__/MetaDataModal-test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,31 @@ describe('This test for MetadataModal', () => {
expect(metadataModalItem).toExist();

const metadataModalItemDom = ReactDOM.findDOMNode(metadataModalItem);
expect(metadataModalItemDom).toNotExist();
expect(metadataModalItemDom).toExist();

const getModals = function() {
return document.getElementsByTagName("body")[0].getElementsByClassName('modal-dialog');
};
expect(getModals().length).toBe(0);

});

it('creates the component with defaults, show=true', () => {
const metadataModalItem = ReactDOM.render(<MetadataModal show={true} useModal={true} id="MetadataModal"/>, document.getElementById("container"));
let thumbnail = "myThumnbnailUrl";
let errors = ["FORMAT"];
let map = {
thumbnail: thumbnail,
id: 123,
canWrite: true,
errors: errors
};

const metadataModalItem = ReactDOM.render(<MetadataModal show={true} useModal={true} map={map} id="MetadataModal"/>, document.getElementById("container"));
expect(metadataModalItem).toExist();

const modalDivList = document.getElementsByClassName("modal-content");
const closeBtnList = modalDivList.item(0).getElementsByTagName('button');
expect(closeBtnList.length).toBe(4);
// expect(metadataModalItemDom.id).toBe('MetadataModal');
expect(closeBtnList.length).toBe(3);
});

it('creates the component with a format error', () => {
Expand All @@ -65,7 +78,7 @@ describe('This test for MetadataModal', () => {

const modalDivList = document.getElementsByClassName("modal-content");
const closeBtnList = modalDivList.item(0).getElementsByTagName('button');
expect(closeBtnList.length).toBe(4);
expect(closeBtnList.length).toBe(3);

const errorFORMAT = modalDivList.item(0).getElementsByTagName('errorFORMAT');
expect(errorFORMAT).toExist();
Expand All @@ -92,7 +105,7 @@ describe('This test for MetadataModal', () => {

const modalDivList = document.getElementsByClassName("modal-content");
const closeBtnList = modalDivList.item(0).getElementsByTagName('button');
expect(closeBtnList.length).toBe(4);
expect(closeBtnList.length).toBe(3);

const errorFORMAT = modalDivList.item(0).getElementsByTagName('errorSIZE');
expect(errorFORMAT).toExist();
Expand Down
29 changes: 17 additions & 12 deletions web/client/components/security/PermissionEditor.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const Select = require('react-select');
const Spinner = require('react-spinkit');
const {Table, Button, Glyphicon} = require('react-bootstrap');
const Message = require('../I18N/Message');
const LocaleUtils = require('../../utils/LocaleUtils');

/**
* Map permission editor
Expand Down Expand Up @@ -41,6 +42,9 @@ const PermissionEditor = React.createClass({
newGroup: React.PropTypes.object,
newPermission: React.PropTypes.string
},
contextTypes: {
messages: React.PropTypes.object
},
getDefaultProps() {
return {
id: "PermissionEditor",
Expand Down Expand Up @@ -122,17 +126,14 @@ const PermissionEditor = React.createClass({
getSelectableGroups() {
return this.props.availableGroups && this.props.availableGroups.filter( (group) => {
return !this.isPermissionPresent(group.groupName);
}

).map((group) => ({label: group.groupName, value: group.id}));
}).map((group) => ({label: group.groupName, value: group.id}));
},
getPermissonLabel(perm) {
// TODO support I18N
switch (perm) {
case "canRead":
return "Can view";
return LocaleUtils.getMessageById(this.context.messages, "map.permissions.canView");
case "canWrite":
return "Can edit";
return LocaleUtils.getMessageById(this.context.messages, "map.permissions.canWrite");
default:
return perm;
}
Expand All @@ -142,8 +143,7 @@ const PermissionEditor = React.createClass({
},
renderPermissionRows() {
if (this.localGroups.length === 0) {
return <tr><td colSpan="3">No rules</td></tr>;

return <tr><td colSpan="3"><Message msgId="map.permissions.noRules" /></td></tr>;
}
return this.localGroups.map((group, index) => {
return (
Expand Down Expand Up @@ -191,23 +191,28 @@ const PermissionEditor = React.createClass({
<Table className="permissions-table" stripped condensed hover>
<thead>
<tr>
<th colSpan="3">Permissions</th>
<th colSpan="3"><Message msgId="map.permissions.title" /></th>
</tr>
</thead>
<tbody>
{this.props.map && this.props.map.permissionLoading ?
<tr><td colSpan="3"><div><Spinner noFadeIn spinnerName="circle" /></div></td></tr>
: this.renderPermissionRows()}


<tr>
<th colSpan="3">Add a rule...</th>
<th colSpan="3"><Message msgId="map.permissions.addRule" /></th>
</tr>


<tr style={{display: "flex"}} key="addRowKey">
<td style={{flex: 1}}>
<Select
noResultsText={LocaleUtils.getMessageById(this.context.messages, "map.permissions.noResult")}
ref="newGroup"
isLoading={!(this.props.availableGroups && this.props.availableGroups.length > 0)}
isLoading={!this.getSelectableGroups()}
clearable={false}
placeholder="Select a group..."
placeholder={LocaleUtils.getMessageById(this.context.messages, "map.permissions.selectGroup")}
options={this.getSelectableGroups()}
value={this.props.newGroup && this.props.newGroup.id}
onChange={this.onNewGroupChoose}/>
Expand Down
27 changes: 18 additions & 9 deletions web/client/translations/data.en-US
Original file line number Diff line number Diff line change
Expand Up @@ -134,16 +134,25 @@
"errorSize": "Max allowed size: 500kb",
"error": "The provided image is not valid",
"thumbnailError": {
"error403" : "You are not allowed to update the thumbnail",
"error404" : "An error occurred while creating the thumbnail",
"error409" : "A thumbnail with this name already exists",
"errorDefault" : "Network error"
"error403": "You are not allowed to update the thumbnail",
"error404": "An error occurred while creating the thumbnail",
"error409": "A thumbnail with this name already exists",
"errorDefault": "Network error"
},
"mapError": {
"error403" : "You are not allowed to update the map",
"error404" : "An error occurred while creating the map",
"error409" : "A map with this name already exists",
"errorDefault" : "Network error"
"error403": "You are not allowed to update the map",
"error404": "An error occurred while creating the map",
"error409": "A map with this name already exists",
"errorDefault": "Network error"
},
"permissions": {
"noRules": "No rules",
"addRule": "Add a rule...",
"selectGroup": "Select a group...",
"canView": "can view",
"canWrite": "can edit",
"noResult": "no results found",
"title": "Permissions Groups"
}
},
"toc": {
Expand Down Expand Up @@ -486,7 +495,7 @@
"error": {"select": "Select one or more zip file"},
"add": "Add",
"cancel": "Cancel",
"success" : " correctly imported"
"success": " correctly imported"
},
"catalog": {
"title": "Catalog",
Expand Down
27 changes: 18 additions & 9 deletions web/client/translations/data.fr-FR
Original file line number Diff line number Diff line change
Expand Up @@ -135,16 +135,25 @@
"errorSize": "taille maximum autorisée: 500kb",
"error": "L'image fournie est pas valide",
"thumbnailError": {
"error403" : "Une erreur est survenue lors de la suppression de la vignette",
"error404" : "Une erreur est survenue lors de la création de la vignette",
"error409" : "Nom de la vignette déjà choisie",
"errorDefault" : "Une erreur est survenue sur le serveur"
"error403": "Une erreur est survenue lors de la suppression de la vignette",
"error404": "Une erreur est survenue lors de la création de la vignette",
"error409": "Nom de la vignette déjà choisie",
"errorDefault": "Une erreur est survenue sur le serveur"
},
"mapError": {
"error403" : "Une erreur est survenue lors de la suppression de la carte",
"error404" : "Une erreur est survenue lors de la création de la carte",
"error409" : "Nom de la carte déjà choisie",
"errorDefault" : "Une erreur est survenue sur le serveur"
"error403": "Une erreur est survenue lors de la suppression de la carte",
"error404": "Une erreur est survenue lors de la création de la carte",
"error409": "Nom de la carte déjà choisie",
"errorDefault": "Une erreur est survenue sur le serveur"
},
"permissions": {
"noRules": "aucune règle",
"addRule": "ajouter une règle...",
"selectGroup": "sélectionner un groupe...",
"canView": "peut voir",
"canWrite": "peut éditer",
"noResult": "aucun résultat trouvé",
"title": "groupes autorisés"
}
},
"toc": {
Expand Down Expand Up @@ -488,7 +497,7 @@
"error": {"select": "Sélectionner un ou plusieurs fichiers zip"},
"add": "Ajouter",
"cancel": "Annuler",
"success" : " Import correct"
"success": " Import correct"
},
"catalog": {
"title": "Catalogue",
Expand Down
27 changes: 18 additions & 9 deletions web/client/translations/data.it-IT
Original file line number Diff line number Diff line change
Expand Up @@ -134,16 +134,25 @@
"errorSize": "Dimensione massima consentita: 500kb",
"error": "L'immagine fornita non è valida",
"thumbnailError": {
"error403" : "Non disponi dei permessi per aggiornare la thumbnail",
"error404" : "Non è stato possibile creare la thumbnail sul server",
"error409" : "Una thumbnail con questo nome esiste già",
"errorDefault" : "Errore di rete"
"error403": "Non disponi dei permessi per aggiornare la thumbnail",
"error404": "Non è stato possibile creare la thumbnail sul server",
"error409": "Una thumbnail con questo nome esiste già",
"errorDefault": "Errore di rete"
},
"mapError": {
"error403" : "Non disponi dei permessi per aggiornare la mappa",
"error404" : "Non è stato possibile creare la mappa sul server",
"error409" : "Una mappa con questo nome esiste già",
"errorDefault" : "Errore di rete"
"error403": "Non disponi dei permessi per aggiornare la mappa",
"error404": "Non è stato possibile creare la mappa sul server",
"error409": "Una mappa con questo nome esiste già",
"errorDefault": "Errore di rete"
},
"permissions": {
"noRules": "Nessuna regola",
"addRule": "Aggiungi una regola...",
"selectGroup": "Seleziona un gruppo...",
"canView": "Può visualizzare",
"canWrite": "Può modificare",
"noResult": "Nessun gruppo rimasto",
"title": "Permessi dei gruppi"
}
},
"toc": {
Expand Down Expand Up @@ -487,7 +496,7 @@
"error": {"select": "Seleziona Shapefile compresso"},
"add": "Importa",
"cancel": "Annulla",
"success" : " correttamente importato"
"success": " correttamente importato"
},
"catalog": {
"title": "Catalogo",
Expand Down

0 comments on commit d3eed24

Please sign in to comment.