Saturday, November 28, 2015

rails + devise + rails_admin + cancan тохиргоо

Rails дээр хэрэглэгчийн эрхийг зохицуулах хүртэлх алхамыг devise + rails_admin + cancan ашиглан хялбар туршилтын ноорог бичив.

  ※item гэсэн модел өмнө нь үүсгэсэн байсан.
  ※Доорх мэдээллийг яаруу бичсэн тул зарим нэг дэс дараалал өөрчлөгдсөн байвал өршөөж ажаам уу m(_ _)m

Орчин
  • CentOS release 6.5
  • ruby (2.1.1p76)
  • rails (4.2.4) 
  • mysql (5.6)
  • devise (3.5.2)
  • cancancan (1.13.1)
  • rails_admin (0.7.0)
1. Gemfile-д gem ийг нэмж өгнө.
  • gem 'devise'
  • gem 'cancancan'
  • gem 'rails_admin'
2. bundle install

3. devise - тохиргоо
  • rails g devise:install
4. config/environments/development.rb ийг өөрчлөнө

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

5. app/views/layouts/application.html.erb ийг өөрчилнө.

  <%= yield %> ийн дээд талд оруулж өгнө

  <% if notice %>
  <p class="alert alert-notice"><%= notice %></p>
  <% end %>
  <% if alert %>
    <p class="alert alert-error"><%= alert %></p>
  <% end %>

6. Devise ийн хэрэглэгч болон role ийг үүсгэнэ.
  • rails g devise user
  • rails g model role name
  • rails g migration CreateJoinTableUserRole user role
  • rake db:migrate
7. app/models/user.rb моделийг өөрчилнө

  has_and_belongs_to_many :roles

  def has_role?(name)
    self.roles.where(name: name).length > 0
  end

8. app/models/role.rb моделийг өөрчилнө

  has_and_belongs_to_many :users

9. cancan - ийн тохиргоо
  • rails g cancan:ability
10. app/models/ability.rb ийг өөрчилнө

  def initialize(user)
    if user.has_role?('superadmin')
      can :manage, :all
    elsif user.has_role?('admin')
      can :read, :all
      can :access, :rails_admin
      can :dashboard
    elsif user.has_role?('manager')
      can :read, :all
      can :access, :rails_admin
      can :dashboard
    else
      can :read, Item
    end
  end

  Дээрх тохиргоог оруулж өгсөнөөр admin, superadmin, manager зэрэг хэрэглэгчийн role - с хамаарч
  can болон cannot-оор хэрэглэгчидийн эрхийг зааж өгөх боломжтой.
  Дээрх тохиргоог item модел дээр туршилтаар оруулсан болно.

11. rails_admin ийг тохиргоо
  • rails g rails_admin:install
  • rake db:migrate
12. config/initializers/rails_admin.rb ийг өөрчилнө.

  Доорх мөрнүүд коммент болсон байгаа бөгөөд. Комментыг авах

  # config.authenticate_with do
  #   warden.authenticate! scope: :user
  # end
  # config.current_user_method(&:current_user)

  болон

  # config.authorize_with :cancan

13. config/environments/development.rb ийг өөрчилж имэйлийн тохиргоог хийнэ.

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => 'smtp.gmail.com',
    :port => 587,
    :authentication => :plain,
    :user_name => 'имэйл',
    :password => 'имэйлий нууц үг'
  }

14. config/initializers/rails_admin.rb ийг өөрчилнө

  config.sign_out_via = :delete ийг config.sign_out_via = :get болгох

15. db/migrate/*_devise_create_users.rb ийг өөрчлөх
  Доорх мөрнүүд коммент болсон байгаа бөгөөд. Комментыг авах

  ## Confirmable
  # t.string   :confirmation_token
  # t.datetime :confirmed_at
  # t.datetime :confirmation_sent_at
  # t.string   :unconfirmed_email # Only if using reconfirmable

16. app/models/user.rb ийг өөрчлөх

  Доорх шиг , :confirmable ийг нэмж өгнө
   devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

17. Доорх өгөгдлүүдийг оруулж өгнө
  • Item
  • User
  • Role

18. Rails ийг ачаалах

  rails s -b 0.0.0.0

Superadmin role - р нэвтрэх үеийн дэлгэц



manager role - р нэвтрэх үеийн дэлгэц




Мэдээлэл
  http://qiita.com/umanoda/items/679419ce30d1996628ed
  http://qiita.com/cigalecigales/items/73d7bd7ec59a001ccd74
  http://d.hatena.ne.jp/htz/20140718/1405690417
  http://codeonhill.com/devise-cancan-and-activeadmin/

No comments:

Post a Comment