12/08/2018, 14:12

Rolify Gem with Cancancan and Devise

Vấn đề phân quyền trong các ứng dụng vẫn luôn là một vấn đề nhức đầu với tất cả những nhà phát triển Như mọi người đã biết Cancancan là một trong những gem phổ biến nhất để phân quyền. Và Rolify là một gem hỗ trợ rất nhiều cho Cancancan trong sự phân quyền đó. Cài đặt gem "rolify" gem ...

Vấn đề phân quyền trong các ứng dụng vẫn luôn là một vấn đề nhức đầu với tất cả những nhà phát triển Như mọi người đã biết Cancancan là một trong những gem phổ biến nhất để phân quyền. Và Rolify là một gem hỗ trợ rất nhiều cho Cancancan trong sự phân quyền đó.

  1. Cài đặt
   gem "rolify"

   gem "devise"

   gem "cancan"

Sau khi insert gem và chạy bundle install cần cài đặt Devise bằng câu lệnh rails generate devise:install và rails generate devise User.

Tiếp theo là cài đặt role cho user bằng lệnh rails generate rolify Role User

Sau khi chạy, ứng dụng của bạn sẽ sinh ra

 invoke  active_record
   create    app/models/role.rb
   invoke    test_unit
   create      test/models/role_test.rb
   create      test/fixtures/roles.yml
   insert    app/models/role.rb
   create    db/migrate/20160507180239_rolify_create_roles.rb
   insert  app/models/user.rb
   create  config/initializers/rolify.rb

Tiếp sau đó cần cài đặt Cancancan bằng câu lệnh

rails generate cancan:ability

Cuối cùng là migrate rake db:migrate

  1. Cách sử dụng

Lúc này, bạn có thể tạo roles và assign cho chúng sử dụng rolify gem. Bạn có thể sử dụng các role như sau:

 user = User.find(1)
  # Để thêm 1 quyền cho user
  user.add_role :admin
  # Để check 1 user có quyền không
  user.has_role? :admin
  # Để xóa quyền
  user.remove_role :admin

Nếu có lỗi khi add 1 role cho user thì hãy xóa optional: true trong model role.rb

Trong ability.rb bạn có thể sử dụng như sau:

    if user.has_role? :admin
      can :manage, :all
    else
      can :read, :all
    end

Mong rằng bài viết nho nhỏ này có thể giúp bạn sử dụng Cancancan nhanh hơn trong quá trình kiểm tra quyền của ứng dụng!

Cảm ơn đã dành thời gian cho bài viết của mình

0