Showing posts with label devise. Show all posts
Showing posts with label devise. Show all posts

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/

Thursday, November 26, 2015

Rails Devise монгол орчуулга

Тохиргоо
  • Орчуулгыг файл болгон devise_mn.yml нэртэй /config/locales - д хадгална
  • /config/application.rb - н хэлний тохиргоог өөрчилнө
    • config.i18n.default_locale = :mn

       

# Additional translations at https://github.com/plataformatec/devise/wiki/I18n



mn:

  devise:

    confirmations:

      confirmed: "Бүртгэл идэвхижлээ."

      send_instructions: "Бүртгэлийг идэвхижүүлэх заавартай имэйл удахгүй илгээнэ."

      send_paranoid_instructions: "Та бүртгүүлсэн бол удахгүй танд бүртгэлээ хэрхэн идэвхижүүлэх заавартай имэйл очих болно."

    failure:

      already_authenticated: "Та аль хэдийн нэвэрсэн байна."

      inactive: "Таны бүртгэл идэвхижээгүй байна."

      invalid: "Нууц үг эсвэл имэйл буруу байна."

      locked: "Таны хаяг түгжигдсэн байна."

      last_attempt: "Таны хаяг 1 үйлдлийн дараа түгжигдэнэ."

      not_found_in_database: "Нууц үг эсвэл имэйл буруу байна."

      timeout: "Дахин логин хийж нэвтэрнэ үү."

      unauthenticated: "Та бүртгүүлнэ үү."

      unconfirmed: "Бүртгэл идэвхижээгүй байна."

    mailer:

      confirmation_instructions:

        subject: "Идэвхижүүлэх заавар"

      reset_password_instructions:

        subject: "Нууц үгийг ахин өөрчлөх"

      unlock_instructions:

        subject: "Түр түгжигдсэн аккаунтыг идэвхижүүлэх заавар"

    omniauth_callbacks:

      failure: "%{kind} баталгаажуулсангүй. Шалтгаан:%{reason}"

      success: "%{kind} баталгаажууллаа."

    passwords:

      no_token: "Энэ хуудас руу хандах боломжгүй. Хаягаа зөв эсэхийг шалгаад дахин оролдоно уу."

      send_instructions: "Нууц үг сэргээх зааварыг удахгүй имэйлээр илгээнэ."

      send_paranoid_instructions: ""

      updated: "Нууц үг амжилттай өөрчлөгдлөө."

      updated_not_active: "Нууц үг амжилттай өөрчлөгдлөө."

    registrations:

      destroyed: "Бүртгэлийг амжилттай устгалаа."

      signed_up: "Бүртгэлийг хүлээн авлаа."

      signed_up_but_inactive: "Бүртгэл амжилттай. Бүртгэл идэвхижсэний дараа та ашиглах боломжтой."

      signed_up_but_locked: "Бүртгэл амжилттай. Хаяг түр хугацаанд түгжигдсэн байгаа тул ашиглах боложмгүй байна."

      signed_up_but_unconfirmed: "Бүртгэлийг идэвхижүүлэх имэйл илгээгдлээ. Имэйл доторх бүртгэл идэвхижүүлэх линк дээр дарж бүртгэлээ идэвхижүүлнэ үү."

      update_needs_confirmation: "Мэдээлэл амжилттай шинэчлэгдлээ. Таны хаягыг баталгаажуулах шаардлагатай тул доорх линк дээр дарж идэвхижүүлнэ үү."

      updated: "Таны бүртгэл шинэчлэгдлээ."

    sessions:

      signed_in: "Амжилттай нэвтэрлээ."

      signed_out: "Амжилттай гарлаа."

    unlocks:

      send_instructions: "Бүртгэлийг дахин идэвхижүүлэх заавр имэйлээр илгээгдлээ."

      send_paranoid_instructions: "Таны мэдээлэл бүртгэлтэй бол дахин идэвхижүүлэх имэйлийг илгээнэ."

      unlocked: "Таны бүртгэл түр идэвхигүй боллоо."

  errors:

    messages:

      already_confirmed: " аль хэдийн бүртгүүлсэн байна. Та нэврэнэ үү."

      confirmation_period_expired: "%{period} -ний дотор баталгаажна. Ахин хүсэлт илгээнэ үү."

      expired: "эрх дууссан байна. Ахин бүртгүүлнэ үү."

      not_found: " олдсонгүй."

      not_locked: " түгжигдээгүй байна."

      not_saved:

        one: "Доорх алдаанаас болж %{resource} -ийг хадгалж чадсангүй."

        other: "%{count} алдааны улмаас %{resource} -ийг хадгалж чадсангүй:"