Sha256: 811b1c990a5208efee1ada5ae6befedf92faf4dbded6fb76e36d2c59d8ee15ac

Contents?: true

Size: 1.92 KB

Versions: 17

Compression:

Stored size: 1.92 KB

Contents

module Locomotive
  class Ability
    include CanCan::Ability

    ROLES = %w(admin designer author)

    def initialize(account, site)
      @account, @site = account, site

      alias_action :index, :show, :edit, :update, to: :touch

      if @site
        @membership = @site.memberships.where(account_id: @account.id).first
      elsif @account.admin?
        @membership = Membership.new(account: @account, role: 'admin')
      end

      return false if @membership.nil?

      if @membership.admin?
        setup_admin_permissions!
      else
        setup_default_permissions!

        setup_designer_permissions! if @membership.designer?

        setup_author_permissions!  if @membership.author?
      end
    end

    def setup_default_permissions!
      cannot :manage, :all
    end

    def setup_author_permissions!
      can :touch, ThemeAsset

      can [:read, :create, :update], Page
      cannot :destroy, Page
      cannot :customize, Page

      can :manage, [ContentEntry, ContentAsset, Translation]

      can :touch, Site, _id: @site._id

      can :read, ContentType
    end

    def setup_designer_permissions!
      can :manage, Page

      can :manage, ContentEntry

      can :manage, ContentType

      can :manage, Snippet

      can :manage, ThemeAsset

      can :manage, ContentAsset

      can :manage, Translation

      can :manage, Site, _id: @site._id

      can :point, Site

      cannot :create, Site

      can :manage, Membership

      cannot :grant_admin, Membership

      cannot [:update, :destroy], Membership do |membership|
        @membership.account_id == membership.account_id || # can not edit myself
        membership.admin? # can not modify an administrator
      end
    end

    def setup_admin_permissions!
      can :manage, :all

      cannot [:update, :destroy], Membership do |membership|
        @membership.account_id == membership.account_id # can not edit myself
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
locomotive_cms-2.5.0 app/models/locomotive/ability.rb
locomotive_cms-2.5.0.rc3 app/models/locomotive/ability.rb
locomotive_cms-2.5.0.rc2 app/models/locomotive/ability.rb
locomotive_cms-2.5.0.rc1 app/models/locomotive/ability.rb
locomotive_cms-2.4.1 app/models/locomotive/ability.rb
locomotive_cms-2.4.0 app/models/locomotive/ability.rb
locomotive_cms-2.3.1 app/models/locomotive/ability.rb
locomotive_cms-2.3.0 app/models/locomotive/ability.rb
locomotive_cms-2.2.3 app/models/locomotive/ability.rb
locomotive_cms-2.2.2 app/models/locomotive/ability.rb
locomotive_cms-2.2.1 app/models/locomotive/ability.rb
locomotive_cms-2.2.0 app/models/locomotive/ability.rb
locomotive_cms-2.1.4 app/models/locomotive/ability.rb
locomotive_cms-2.1.3 app/models/locomotive/ability.rb
locomotive_cms-2.1.2 app/models/locomotive/ability.rb
locomotive_cms-2.1.1 app/models/locomotive/ability.rb
locomotive_cms-2.1.0 app/models/locomotive/ability.rb