QutBioacoustics/baw-server

View on GitHub
app/views/permissions/index.html.haml

Summary

Maintainability
Test Coverage
- content_for :meta_title, "Project #{@project.name} | Permissions"
- content_for :page_title do
  %em
    = @project.name
  Permissions
- @info_bar = {title: t('baw.shared.links.permissions.title'), icon: 'key'}
- menu_edit_link(:project, project_permissions_path(@project), 'permissions')

- content_for :right_sidebar do
  = render partial: 'shared/sidebar_metadata_user_created', locals: { item: @project }
  = render partial: 'shared/sidebar_metadata_users', locals: { title: 'Owned by', users: @project.owners }

- anon_level = Access::Core.highest(Access::Core.anon_levels(@project))
- anon_is_none = anon_level.blank?
- anon_is_read = anon_level == :reader
- anon_level_words = anon_is_none ? 'None' : Access::Core.get_level_name(anon_level)

- logged_in_level = Access::Core.highest(Access::Core.logged_in_levels(@project))
- logged_in_is_none = logged_in_level.blank?
- logged_in_is_read = logged_in_level == :reader
- logged_in_is_write = logged_in_level == :writer
- logged_in_level_words = logged_in_is_none ? 'None' : Access::Core.get_level_name(logged_in_level)

.col-md-12
  = simple_form_for(:permission, url: project_permissions_path(@project), method: :get, html: {class: 'form-horizontal' }) do
    %p
      This page allows you to change who can view or modify this project and the sites it contains.
      As an owner, you can assign one of four levels of permissions.

    %ul
      %li
        %strong
          No access (none)
        prevents users from viewing anything in this project.
      %li
        %strong
          Reader
        allows users to view anything in this project.
      %li
        %strong
          Writer
        allows users to add and change annotations, in addition to reader permission.
      %li
        %strong
          Owner
        allows users to modify and delete this project and its sites, in addition to writer permission.

    .row
      .col-md-6
        %h3
          Visitors

        %p
          Visitors are public (anonymous) users that are either not logged in or have not registered.

        .list-group
          %button.list-group-item.inline-spread{type: 'submit',
            value: 'none', id: 'project_wide_anonymous_permissions_level_none', name: '[project_wide][anonymous]',
            disabled: (anon_is_none ? 'disabled' : nil)}
            No access (none)
            - if anon_is_none
              %i.fa.fa-check.text-success
          %button.list-group-item.inline-spread{type: 'submit',
            value: 'reader', id: 'project_wide_anonymous_permissions_level_reader', name: '[project_wide][anonymous]',
            disabled: (anon_is_read ? 'disabled' : nil)}
            Reader access
            - if anon_is_read
              %i.fa.fa-check.text-success

      .col-md-6
        %h3
          Users

        %p
          Users are people that have registered and have <strong>logged into the website</strong>.

        .list-group
          %button.list-group-item.inline-spread{type: 'submit',
            value: 'none', id: 'project_wide_logged_in_permissions_level_none', name: '[project_wide][logged_in]',
            disabled: (logged_in_is_none ? 'disabled' : nil)}
            No access (none)
            - if logged_in_is_none
              %i.fa.fa-check.text-success
          %button.list-group-item.inline-spread{type: 'submit',
            value: 'reader', id: 'project_wide_logged_in_permissions_level_reader', name: '[project_wide][logged_in]',
            disabled: (logged_in_is_read ? 'disabled' : nil)}
            Reader access
            - if logged_in_is_read
              %i.fa.fa-check.text-success
          %button.list-group-item.inline-spread{type: 'submit',
            value: 'writer', id: 'project_wide_logged_in_permissions_level_writer', name: '[project_wide][logged_in]',
            disabled: (logged_in_is_write ? 'disabled' : nil)}
            Writer access
            - if logged_in_is_write
              %i.fa.fa-check.text-success
    %h3#individual-users
      Individual Users

    %p
      You can assign permissions to individual logged in users. Individual permissions are the most
      important permissions - they override <em>Logged In Users</em> permissions.
    %p
      <strong>If you only want some users to have access, use this section only.</strong>

    = alphabetical_paginator(params[:page], 2, 1)
    = hidden_field_tag(:page, params[:page])

    %table.table.table-striped.table-hover.table-condensed
      %thead
        %tr
          %th
            %span.fa.fa-user{aria: {hidden: 'true'}}
            User
          %th{style: 'width:318px'}
            Individual
          %th.text-center
            Visitors
            %span.fa.fa-question-circle{aria: {hidden: 'true'}, data: {toggle: 'tooltip', placement: 'right'},
              title: "The Visitors user permission (#{anon_level_words}) comes from above."}
          %th.text-center
            Users
            %span.fa.fa-question-circle{aria: {hidden: 'true'}, data: {toggle: 'tooltip', placement: 'right'},
               title: "The User permission (#{logged_in_level_words}), for logged in users  comes from above."}
          %th.text-center
            Overall
            %span.fa.fa-question-circle{aria: {hidden: 'true'}, data: {toggle: 'tooltip', placement: 'right'},
               title: "The overall permission is a combination of Individual, Visitor, and User permissions"}
      %tbody
        - @users.each do |user|
          - next if Access::Core.is_admin?(user)
          - next if Access::Core.is_harvester?(user)
          - user_levels = Access::Core.user_only_levels(user, @project)
          - user_level = Access::Core.highest(user_levels)
          - level_with_logged_in_level = Access::Core.highest([user_level, logged_in_level])
          - level_with_logged_in_level_words = level_with_logged_in_level.blank? ? 'None' : Access::Core.get_level_name(level_with_logged_in_level)
          - user_and_logged_levels_match = user_level == level_with_logged_in_level
          - button_style = 'width: 74px;text-align:left;'
          %tr{data: {user: {id: user.id}}}
            %td= link_to "#{user.user_name}", user_account_path(user)
            %td
              %button.btn.btn-default.btn-sm.inline-spread{type: 'submit', value: user.id, id: 'per_user_none', name: '[per_user][none]',
                disabled: (user_level.nil? ? 'disabled' : nil), style: button_style}
                None
                - if user_level.nil?
                  %i.fa.fa-check.text-success

              %button.btn.btn-default.btn-sm.inline-spread{type: 'submit', value: user.id, id: 'per_user_reader', name: '[per_user][reader]',
                disabled: (user_level == :reader ? 'disabled' : nil), style: button_style}
                Reader
                - if user_level == :reader
                  %i.fa.fa-check.text-success
              %button.btn.btn-default.btn-sm.inline-spread{type: 'submit', value: user.id, id: 'per_user_writer', name: '[per_user][writer]',
                disabled: (user_level == :writer ? 'disabled' : nil), style: button_style}
                Writer
                - if user_level == :writer
                  %i.fa.fa-check.text-success
              %button.btn.btn-default.btn-sm.inline-spread{type: 'submit', value: user.id, id: 'per_user_owner', name: '[per_user][owner]',
                disabled: (user_level == :owner ? 'disabled' : nil), style: button_style}
                Owner
                - if user_level == :owner
                  %i.fa.fa-check.text-success
            %td.text-center
              = anon_level_words
            %td.text-center
              = logged_in_level_words
            %td.overall-permission.text-center{style: 'white-space: nowrap;'}
              = "#{level_with_logged_in_level_words}"
        - if @users.length == 0
          %tr
            %td{colspan: '5'}
              - empty_message do
                No users found for this page