Skip to content

Devise User

Chang-Woo Rhee edited this page Apr 5, 2022 · 3 revisions

Device for User

docker-compose run --no-deps web rails g model user name:string:uniq

https://github.com/heartcombo/devise

docker-compose run --no-deps web rails generate devise:install
docker-compose run --no-deps web rails generate devise User
docker-compose run --no-deps web rails db:migrate
docker-compose run --no-deps web rails generate devise:views:bootstrap_templates
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

Device Bootstrap

https://github.com/hisea/devise-bootstrap-views gemfile

gem 'devise-bootstrap-views', '~> 1.0'
docker-compose run --no-deps web rails generate devise:views:bootstrap_templates

Ownership

https://github.com/x1wins/tutorial-rails-rest-api#authorize

    class ApplicationController < ActionController::API
      def is_owner user_id
        unless user_id == @current_user.id
          render json: nil, status: :forbidden
          return
        end
      end
    
      def is_owner_object data
        if data.nil? or data.user_id.nil?
          return render status: :not_found
        else
          is_owner data.user_id
        end
      end
    end
    
    # How to Use
    class PostsController < ApplicationController
        before_action only: [:update, :edit, :destroy] do
          is_owner_object @post ##your object
        end
    end        

User Role

https://github.com/heartcombo/devise/wiki/How-To:-Add-a-default-role-to-a-User

rails g model Role name:string
rails g migration addRoleIdToUser role:references
rake db:migrate
class User < ActiveRecord::Base
  belongs_to :role
end
class Role < ActiveRecord::Base
  has_many :users
end
  • seed.rb
['registered', 'banned', 'moderator', 'admin'].each do |role|
  Role.find_or_create_by({name: role})
end
rake db:seed
  • user.rb
class User < ActiveRecord::Base
  belongs_to :role
  before_create :set_default_role
  # or 
  # before_validation :set_default_role 

  private
  def set_default_role
    self.role ||= Role.find_by_name('registered')
  end
end
Clone this wiki locally