Sha256: 71072676080c04a90d7730ffae9ac30737910d59ad7efc597a64eb80c2d2061c

Contents?: true

Size: 1.77 KB

Versions: 2

Compression:

Stored size: 1.77 KB

Contents

module Ddr
  module Auth
    module User
      extend ActiveSupport::Concern

      included do
        include Blacklight::User

        has_many :events, inverse_of: :user, class_name: "Ddr::Events::Event"

        delegate :can, :can?, :cannot, :cannot?, to: :ability

        validates_uniqueness_of :username, :case_sensitive => false
        validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/

        devise :database_authenticatable, :omniauthable, omniauth_providers: [:shibboleth]

        class_attribute :user_key_attribute
        self.user_key_attribute = Devise.authentication_keys.first
      end

      module ClassMethods
        def find_by_user_key(key)
          send("find_by_#{user_key_attribute}", key)
        end

        def from_omniauth(auth)
          user = find_by_user_key(auth.uid) ||
            new(user_key_attribute => auth.uid, :password => Devise.friendly_token)
          user.update!(email: auth.info.email,
                       display_name: auth.info.name,
                       first_name: auth.info.first_name,
                       last_name: auth.info.last_name,
                       nickname: auth.info.nickname)
          user
        end
      end

      # Copied from Hydra::User
      def user_key
        send(user_key_attribute)
      end

      def to_s
        user_key
      end

      def agent
        user_key
      end

      def ability
        # warn "[DEPRECATION] `Ddr::Auth::User#ability` is deprecated." \
        #      " In a web context, please use the `current_ability` helper." \
        #      " Otherwise, please use `Ddr::Auth::AbilityFactory.call(user)`" \
        #      " to create an ability instance for the user."
        @ability ||= AbilityFactory.call(self)
      end
      
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ddr-models-2.0.0.pre.2 lib/ddr/auth/user.rb
ddr-models-2.0.0.pre.1 lib/ddr/auth/user.rb