diff options
| author | Thomas Haddad | 2017-04-03 17:26:12 +0200 | 
|---|---|---|
| committer | Thomas Haddad | 2017-04-03 17:26:12 +0200 | 
| commit | 4ed8d66ec3025cb4e554554161a7af01307bd128 (patch) | |
| tree | 8eb6b0a9f3e1f60eb54cae12135267e5c28672f9 | |
| parent | eaf643b91f724a3f3b31855299b3682619cf818c (diff) | |
| download | chouette-core-4ed8d66ec3025cb4e554554161a7af01307bd128.tar.bz2 | |
Refs #3028: Add and update permissions for vj and jp
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
12 files changed, 34 insertions, 19 deletions
| diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js index 573ebf228..aa2d208df 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js @@ -17,7 +17,7 @@ class CreateModal extends Component {    }    render() { -    if(this.props.status.isFetching == true) { +    if(this.props.status.isFetching == true || this.props.status.policy['journey_patterns.edit'] == false) {        return false      }      if(this.props.status.fetchSuccess == true) { diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js index 3dae38d74..04e3b8974 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js @@ -34,7 +34,7 @@ class JourneyPattern extends Component{              type='checkbox'              id={sp.id}              checked={sp.checked} -            disabled={this.props.value.deletable ? 'disabled' : ''} +            disabled={(this.props.value.deletable || this.props.status.policy['journey_patterns.edit'] == false) ? 'disabled' : ''}              >            </input>            <span className='radio-label'></span> @@ -74,7 +74,7 @@ class JourneyPattern extends Component{                  <span className='fa fa-cog'></span>                </div>                <ul className='dropdown-menu'> -                <li className={this.props.value.deletable ? 'disabled' : ''}> +                <li className={(this.props.value.deletable || this.props.status.policy['journey_patterns.edit'] == false) ? 'disabled' : ''}>                    <a                      href='#'                      onClick={this.props.onOpenEditModal} @@ -87,7 +87,7 @@ class JourneyPattern extends Component{                  <li className={this.props.value.object_id ? '' : 'disabled'}>                    {this.vehicleJourneyURL(this.props.value.object_id)}                  </li> -                <li className='delete-action'> +                <li className={'delete-action' + ((this.props.status.policy['journey_patterns.edit'] == false)? ' disabled' : '')}>                    <a                      href='#'                      onClick={(e) => { diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js index 37a0a5126..e0557d651 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js @@ -116,6 +116,7 @@ class JourneyPatterns extends Component{                        onCheckboxChange= {(e) => this.props.onCheckboxChange(e, index)}                        onOpenEditModal= {() => this.props.onOpenEditModal(index, journeyPattern)}                        onDeleteJourneyPattern={() => this.props.onDeleteJourneyPattern(index)} +                      status= {this.props.status}                        />                    )}                  </div> diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js index 6e09430a0..43800330f 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js @@ -15,7 +15,7 @@ class SaveJourneyPattern extends Component{    }    render() { -    if(this.props.status.isFetching == true) { +    if(this.props.status.isFetching == true || (this.props.status.policy['journey_patterns.edit'] == true)) {        return false      }      if(this.props.status.fetchSuccess == true) { diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/index.js index a2e1c2fb6..b06957e0f 100644 --- a/app/assets/javascripts/es6_browserified/journey_patterns/index.js +++ b/app/assets/javascripts/es6_browserified/journey_patterns/index.js @@ -13,6 +13,7 @@ var App = require('./components/App')  var initialState = {    status: { +    policy: window.perms,      fetchSuccess: true,      isFetching: false    }, diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js index b22e1d826..bd34ae114 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js @@ -15,7 +15,7 @@ class SaveVehicleJourneys extends Component{    }    render() { -    if(this.props.status.isFetching == true) { +    if(this.props.status.isFetching == true || this.props.filters.policy['vehicle_journeys.edit'] == false) {        return false      }      if(this.props.status.fetchSuccess == true) { @@ -46,7 +46,8 @@ class SaveVehicleJourneys extends Component{  SaveVehicleJourneys.propTypes = {    vehicleJourneys: PropTypes.array.isRequired,    page: PropTypes.number.isRequired, -  status: PropTypes.object.isRequired +  status: PropTypes.object.isRequired, +  filters: PropTypes.object.isRequired  }  module.exports = SaveVehicleJourneys diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js index dc0621f76..f91a59a16 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js @@ -54,7 +54,7 @@ class VehicleJourney extends Component {              <div key={i}>{this.timeTableURL(tt.id)}</div>            )} -          {this.isDisabled(this.props.filters.policy['vehicle_journeys.edit'], this.props.filters.policy['vehicle_journeys.destroy']) && +          {(this.props.filters.policy['vehicle_journeys.edit'] == true) &&              <div className={(this.props.value.deletable ? 'disabled ' : '') + 'checkbox'}>                <input                  id={this.props.index} @@ -74,13 +74,13 @@ class VehicleJourney extends Component {              <div className={'cellwrap' + (vj.dummy ? ' headlined' : '') + (this.cityNameChecker(vj) ? ' headlined' : '')}>                {this.props.filters.toggleArrivals &&                  <div data-headline='Départ à'> -                  <span className={((this.props.value.deletable && (!vj.dummy)) ? 'disabled ' : '') + 'input-group time'}> +                  <span className={((this.props.value.deletable && (!vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false) ? 'disabled ' : '') + 'input-group time'}>                      <input                        type='number'                        min='00'                        max='23'                        className='form-control' -                      disabled={(this.props.value.deletable && (!vj.dummy))} +                      disabled={(this.props.value.deletable && (!vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false)}}                        value={vj.arrival_time['hour']}                        /> @@ -90,7 +90,7 @@ class VehicleJourney extends Component {                        min='00'                        max='59'                        className='form-control' -                      disabled={((this.props.value.deletable) && (!vj.dummy))} +                      disabled={((this.props.value.deletable) && (!vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'minute', false, false)}}                        value={vj.arrival_time['minute']}                        /> @@ -103,13 +103,13 @@ class VehicleJourney extends Component {                    }                  </div>                  <div data-headline='Arrivée à'> -                  <span className={(this.isDisabled(this.props.value.deletable, vj.dummy) ? 'disabled ' : '') + 'input-group time'}> +                  <span className={((this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false) ? 'disabled ' : '') + 'input-group time'}>                      <input                        type='number'                        min='00'                        max='23'                        className='form-control' -                      disabled={this.isDisabled(this.props.value.deletable, vj.dummy)} +                      disabled={(this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', true, this.props.filters.toggleArrivals)}}                        value={vj.departure_time['hour']}                        /> @@ -119,7 +119,7 @@ class VehicleJourney extends Component {                        min='00'                        max='59'                        className='form-control' -                      disabled={this.isDisabled(this.props.value.deletable, vj.dummy)} +                      disabled={(this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}                        onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, "minute", true,  this.props.filters.toggleArrivals)}}                        value={vj.departure_time['minute']}                        /> diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js index 1a1588f85..1eba37a90 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js @@ -27,7 +27,7 @@ class CreateModal extends Component {          <li className='st_action'>            <a              href='#' -            className={((this.props.filters.policy['vehicle_journeys.create']) ? '' : 'disabled')} +            className={((this.props.filters.policy['vehicle_journeys.edit'] == true) ? '' : 'disabled')}              data-toggle='modal'              data-target='#NewVehicleJourneyModal'              onClick={this.props.onOpenCreateModal} diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js index 5af30ab82..87bbe5353 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js @@ -7,7 +7,8 @@ const mapStateToProps = (state) => {    return {      vehicleJourneys: state.vehicleJourneys,      page: state.pagination.page, -    status: state.status +    status: state.status, +    filters: state.filters    }  } diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js index 1b9ff8f41..bf6930215 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js @@ -21,7 +21,7 @@ if (window.journeyPatternId)  var initialState = {    filters: {      selectedJourneyPatterns : selectedJP, -    policy: perms, +    policy: window.perms,      toggleArrivals: false,      queryString: '',      query: { diff --git a/app/controllers/journey_patterns_collections_controller.rb b/app/controllers/journey_patterns_collections_controller.rb index 51cc48c2a..2963a8ad7 100644 --- a/app/controllers/journey_patterns_collections_controller.rb +++ b/app/controllers/journey_patterns_collections_controller.rb @@ -1,6 +1,7 @@  class JourneyPatternsCollectionsController < ChouetteController    respond_to :html    respond_to :json +  before_action :user_permissions, only: :show    belongs_to :referential do      belongs_to :line, :parent_class => Chouette::Line do @@ -41,6 +42,15 @@ class JourneyPatternsCollectionsController < ChouetteController      @stop_points_list = @stop_points_list.sort_by {|a| a[:position] }    end +  def user_permissions +    @perms = {}.tap do |perm| +      ['journey_patterns.create', 'journey_patterns.edit', 'journey_patterns.destroy'].each do |name| +        perm[name] = current_user.permissions.include?(name) +      end +    end +    @perms = @perms.to_json +  end +    def update      state  = JSON.parse request.raw_post      Chouette::JourneyPattern.state_update route, state diff --git a/app/views/journey_patterns_collections/show.html.slim b/app/views/journey_patterns_collections/show.html.slim index 33e13e3bb..b5607090f 100644 --- a/app/views/journey_patterns_collections/show.html.slim +++ b/app/views/journey_patterns_collections/show.html.slim @@ -11,9 +11,10 @@        .col-lg-12          #journey_patterns -  = javascript_tag do    | window.stopPoints = #{(@stop_points_list.to_json).html_safe};    | window.journeyPatternLength = #{@journey_patterns.total_entries()}; -  | window.journeyPatternsPerPage = #{@ppage} +  | window.journeyPatternsPerPage = #{@ppage}; +  | window.perms = #{raw @perms} +  = javascript_include_tag 'es6_browserified/journey_patterns/index.js' | 
