Skip to content
This repository has been archived by the owner on Feb 9, 2022. It is now read-only.

Commit

Permalink
feat: access rule updates for sponsors group
Browse files Browse the repository at this point in the history
  • Loading branch information
smarcet committed Feb 23, 2024
1 parent 7cfcbab commit a5b9002
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 42 deletions.
4 changes: 2 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ OS_BASE_URL=
SCOPES_BASE_REALM=${API_BASE_URL}
SCOPES="profile openid offline_access ${SCOPES_BASE_REALM}/summits/delete-event ${SCOPES_BASE_REALM}/summits/write ${SCOPES_BASE_REALM}/summits/write-event ${SCOPES_BASE_REALM}/summits/read/all ${SCOPES_BASE_REALM}/summits/read ${SCOPES_BASE_REALM}/summits/publish-event ${SCOPES_BASE_REALM}/members/read ${SCOPES_BASE_REALM}/members/read/me ${SCOPES_BASE_REALM}/speakers/write ${SCOPES_BASE_REALM}/attendees/write ${SCOPES_BASE_REALM}/members/write ${SCOPES_BASE_REALM}/organizations/write ${SCOPES_BASE_REALM}/organizations/read ${SCOPES_BASE_REALM}/summits/write-presentation-materials ${SCOPES_BASE_REALM}/summits/registration-orders/update ${SCOPES_BASE_REALM}/summits/registration-orders/delete ${SCOPES_BASE_REALM}/summits/registration-orders/create/offline ${SCOPES_BASE_REALM}/summits/badge-scans/read entity-updates/publish ${SCOPES_BASE_REALM}/audit-logs/read"
GOOGLE_API_KEY=
ALLOWED_USER_GROUPS="super-admins administrators summit-front-end-administrators summit-room-administrators track-chairs-admins"
ALLOWED_USER_GROUPS="super-admins administrators summit-front-end-administrators summit-room-administrators track-chairs-admins sponsors"
APP_CLIENT_NAME = "openstack"
PUBLIC_STORAGES="S3 SWIFT"
OAUTH2_FLOW="code"
TIMEINTERVALSINCE1970_API_URL=https://timeintervalsince1970.dev.fnopen.com
SIGNAGE_ABLY_API_KEY=
SIGNAGE_ABLY_API_KEY=
22 changes: 20 additions & 2 deletions src/access-routes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,36 @@ sponsors:
- super-admins
- administrators
- summit-front-end-administrators
- sponsors

sponsors-add:
- super-admins
- administrators
- summit-front-end-administrators

sponsors-edit:
- super-admins
- administrators
- summit-front-end-administrators

sponsors-delete:
- super-admins
- administrators
- summit-front-end-administrators

admin-sponsors:
- super-admins
- administrators
-
- summit-front-end-administrators

general:
- super-admins
- administrators
- summit-front-end-administrators
- summit-room-administrators
- summit-registration-administrators
- track-chairs-admins
- sponsors

audit-log:
- super-admins
Expand Down Expand Up @@ -207,4 +225,4 @@ progress-flags:
signage:
- super-admins
- administrators
- summit-front-end-administrators
- summit-front-end-administrators
47 changes: 24 additions & 23 deletions src/components/forms/sponsor-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,8 @@ class SponsorForm extends React.Component {
}

handleAdvertisementAdd(ev) {
const {entity, history} = this.props;
ev.preventDefault();
const {entity, history} = this.props;
ev.preventDefault();
history.push(`/app/summits/${entity.summit_id}/sponsors/${entity.id}/ads/new`);
}

Expand Down Expand Up @@ -234,7 +234,7 @@ class SponsorForm extends React.Component {
confirmButtonText: T.translate("general.yes_delete")
}).then(function(result){
if (result.value) {
collection === 'ads' ? onAdvertisementDelete(element)
collection === 'ads' ? onAdvertisementDelete(element)
: collection === 'materials' ?
onMaterialDelete(element)
:
Expand All @@ -246,7 +246,7 @@ class SponsorForm extends React.Component {

render() {
const {entity, showSection} = this.state;
const { currentSummit, sponsorships, onCreateCompany } = this.props;
const { currentSummit, onCreateCompany, canEditSponsors } = this.props;

const advertisement_columns = [
{ columnKey: 'link', value: T.translate("edit_sponsor.link") },
Expand Down Expand Up @@ -317,14 +317,14 @@ class SponsorForm extends React.Component {
<div className="col-md-6">
<label> {T.translate("edit_sponsor.sponsorship")}</label>
<SummitSponsorshipTypeInput
id="sponsorship"
id="sponsorship"
value={entity.sponsorship}
key={JSON.stringify(entity.sponsorship)}
summitId={currentSummit.id}
onChange={this.handleChange} />
</div>
</div>
{entity.id !== 0 &&
{entity.id !== 0 && canEditSponsors &&
<div className="row form-group">
<div className="col-md-12">
<label> {T.translate("general.member")} </label>
Expand All @@ -345,13 +345,13 @@ class SponsorForm extends React.Component {
</div>
}

{entity.id !== 0 &&
{entity.id !== 0 && canEditSponsors &&
<>
<hr/>

<Panel show={showSection === 'sponsor-page'} title={T.translate("edit_sponsor.sponsor_page")}
handleClick={this.toggleSection.bind(this, 'sponsor-page')}>

<div className="row form-group">
<div className="col-md-12">
<label> {T.translate("edit_sponsor.intro")} </label>
Expand All @@ -366,7 +366,7 @@ class SponsorForm extends React.Component {
value={entity.marquee}
onChange={this.handleChange}
className="form-control"
/>
/>
</div>
</div>
<div className="row form-group">
Expand All @@ -381,9 +381,9 @@ class SponsorForm extends React.Component {
<div className="col-md-4">
<label> {T.translate("edit_sponsor.chat_link")} </label>
<Input className="form-control" id="chat_link" value={entity.chat_link} onChange={this.handleChange} />
</div>
</div>
</div>

<div className="row form-group">
<div className="col-md-6">
<div className="row">
Expand Down Expand Up @@ -422,7 +422,7 @@ class SponsorForm extends React.Component {
<Input className="form-control" id="header_image_mobile_alt_text" value={entity.header_image_mobile_alt_text} onChange={this.handleChange} />
</div>
</div>
<div className="row form-group">
<div className="row form-group">
<div className="col-md-6">
<div className="row">
<div className="col-md-12">
Expand Down Expand Up @@ -464,7 +464,7 @@ class SponsorForm extends React.Component {
<div className="col-md-4">
<label> {T.translate("edit_sponsor.featured_event")} </label>
<EventInput
id="featured_event"
id="featured_event"
value={entity.featured_event}
key={JSON.stringify(entity.featured_event)}
summitId={currentSummit.id}
Expand All @@ -473,7 +473,7 @@ class SponsorForm extends React.Component {
</div>

<hr/>
<div className="row form-group">
<div className="row form-group">
<div className="col-md-12">
<label htmlFor="ads">
{T.translate("edit_sponsor.advertisements")}
Expand All @@ -491,7 +491,7 @@ class SponsorForm extends React.Component {
</div>

<hr/>
<div className="row form-group">
<div className="row form-group">
<div className="col-md-12">
<label htmlFor="materials">
{T.translate("edit_sponsor.materials")}
Expand All @@ -509,7 +509,7 @@ class SponsorForm extends React.Component {
</div>

<hr/>
<div className="row form-group">
<div className="row form-group">
<div className="col-md-12">
<label htmlFor="social_networks">
{T.translate("edit_sponsor.social_networks")}
Expand All @@ -534,18 +534,19 @@ class SponsorForm extends React.Component {
activePage={entity.social_networks_collection.currentPage}
onSelect={(page) => this.handlePageChange(page, 'social_networks')}
/>
</div>
</div>
</div>
</Panel>
</>
}

<div className="row">
<div className="col-md-12 submit-buttons">
<input type="button" onClick={this.handleSubmit}
className="btn btn-primary pull-right" value={T.translate("general.save")}/>
{canEditSponsors &&
<div className="row">
<div className="col-md-12 submit-buttons">
<input type="button" onClick={this.handleSubmit}
className="btn btn-primary pull-right" value={T.translate("general.save")}/>
</div>
</div>
</div>
}
</form>
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/nav-menu/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ class NavMenu extends React.Component {
},
{name: 'sponsors', iconClass: 'fa-handshake-o', accessRoute: 'sponsors',
childs: [
{name:'sponsor_list', linkUrl:`summits/${summit_id}/sponsors`, accessRoute: 'admin-sponsors'},
{name:'sponsor_list', linkUrl:`summits/${summit_id}/sponsors`, accessRoute: 'sponsors'},
{name:'sponsorship_list', linkUrl:`summits/${summit_id}/sponsorships`, accessRoute: 'admin-sponsors'},
{name:'badge_scans', linkUrl:`summits/${summit_id}/badge-scans`, accessRoute: 'sponsors'},
]
Expand Down
21 changes: 21 additions & 0 deletions src/models/member.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,27 @@ class Member {
}
return false;
}

canAddSponsors(){
for (var i in this._member.groups) {
if (access['sponsors-add'].includes(this._member.groups[i].code)) return true;
}
return false;
}

canEditSponsors(){
for (var i in this._member.groups) {
if (access['sponsors-edit'].includes(this._member.groups[i].code)) return true;
}
return false;
}

canDeleteSponsors(){
for (var i in this._member.groups) {
if (access['sponsors-delete'].includes(this._member.groups[i].code)) return true;
}
return false;
}
}

export default Member;
11 changes: 7 additions & 4 deletions src/pages/sponsors/edit-sponsor-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

import React from 'react'
import { connect } from 'react-redux';
import { Breadcrumb } from 'react-breadcrumbs';
import T from "i18n-react/dist/i18n-react";
import SponsorForm from '../../components/forms/sponsor-form';
import {
Expand All @@ -33,6 +32,7 @@ import {
updateSponsorAdsOrder,
updateSponsorMaterialOrder
} from "../../actions/sponsor-actions";
import Member from "../../models/member";

class EditSponsorPage extends React.Component {

Expand Down Expand Up @@ -61,9 +61,10 @@ class EditSponsorPage extends React.Component {
}

render() {
const { currentSummit, entity, errors, match, history, sponsorships } = this.props;
const { currentSummit, entity, errors, history, sponsorships, member } = this.props;
const title = (entity.id) ? T.translate("general.edit") : T.translate("general.add");

const memberObj = new Member(member);
const canEditSponsors = memberObj.canEditSponsors();
return (
<div className="container">
<h3>{title} {T.translate("edit_sponsor.sponsor")}</h3>
Expand All @@ -89,16 +90,18 @@ class EditSponsorPage extends React.Component {
getSponsorAdvertisements={this.props.getSponsorAdvertisements}
getSponsorMaterials={this.props.getSponsorMaterials}
getSponsorSocialNetworks={this.props.getSponsorSocialNetworks}
canEditSponsors={canEditSponsors}
/>
}
</div>
)
}
}

const mapStateToProps = ({ currentSummitState, currentSponsorState, currentSummitSponsorshipListState }) => ({
const mapStateToProps = ({ loggedUserState, currentSummitState, currentSponsorState, currentSummitSponsorshipListState }) => ({
currentSummit: currentSummitState.currentSummit,
sponsorships: currentSummitSponsorshipListState.sponsorships,
member : loggedUserState.member,
...currentSponsorState
});

Expand Down
29 changes: 19 additions & 10 deletions src/pages/sponsors/sponsor-list-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import Swal from "sweetalert2";
import {SortableTable} from 'openstack-uicore-foundation/lib/components';
import { getSummitById } from '../../actions/summit-actions';
import { getSponsors, deleteSponsor, updateSponsorOrder } from "../../actions/sponsor-actions";
import Member from "../../models/member";

class SponsorListPage extends React.Component {

Expand Down Expand Up @@ -68,7 +69,10 @@ class SponsorListPage extends React.Component {
}

render(){
const {currentSummit, sponsors, totalSponsors, allSponsorships} = this.props;
const {currentSummit, sponsors, totalSponsors, member} = this.props;
const memberObj = new Member(member);
const canAddSponsors = memberObj.canAddSponsors();
const canDeleteSponsors = memberObj.canDeleteSponsors();

const columns = [
{ columnKey: 'id', value: T.translate("sponsor_list.id") },
Expand All @@ -79,10 +83,13 @@ class SponsorListPage extends React.Component {
const table_options = {
actions: {
edit: { onClick: this.handleEdit },
delete: { onClick: this.handleDelete }
}
};

if(canDeleteSponsors){
table_options.actions = {...table_options.actions, delete: { onClick: this.handleDelete }};
}

if(!currentSummit.id) return (<div />);

let sortedSponsors = [...sponsors];
Expand All @@ -93,14 +100,15 @@ class SponsorListPage extends React.Component {
return(
<div className="container">
<h3> {T.translate("sponsor_list.sponsor_list")} ({totalSponsors})</h3>
<div className={'row'}>
<div className="col-md-6 text-right col-md-offset-6">
<button className="btn btn-primary right-space" onClick={this.handleNewSponsor}>
{T.translate("sponsor_list.add_sponsor")}
</button>
{canAddSponsors &&
<div className={'row'}>
<div className="col-md-6 text-right col-md-offset-6">
<button className="btn btn-primary right-space" onClick={this.handleNewSponsor}>
{T.translate("sponsor_list.add_sponsor")}
</button>
</div>
</div>
</div>

}
{sponsors.length === 0 &&
<div>{T.translate("sponsor_list.no_sponsors")}</div>
}
Expand All @@ -122,9 +130,10 @@ class SponsorListPage extends React.Component {
}
}

const mapStateToProps = ({ currentSummitState, currentSponsorListState, currentSummitSponsorshipListState }) => ({
const mapStateToProps = ({ loggedUserState, currentSummitState, currentSponsorListState, currentSummitSponsorshipListState }) => ({
currentSummit : currentSummitState.currentSummit,
allSponsorships : currentSummitSponsorshipListState.sponsorships,
member : loggedUserState.member,
...currentSponsorListState
})

Expand Down

0 comments on commit a5b9002

Please sign in to comment.