[英]Rails 4 user roles and permissions
我正在為組織編寫rails應用程序。 每個用戶可能有一個或多個角色,並且只能根據這些角色訪問某些控制器操作。
例如,只有管理員可以創建,銷毀和更新User
的某些字段。 另外,還有一些Team
S的每一個有一個團隊的領導者 ,只有隊長可以更新的某些信息Team
(如成員列表,例如)。 但是, Admins
是首先指派團隊負責人的人。
我的場景的具體細節並不重要,我只希望我描述了有許多不同角色和權限的情況。
我的問題是:使用什么寶石? 我的第一個想法是CanCan,但最近一次提交是差不多一年前的事情,並沒有提到Rails 4的兼容性。 目前有替代方案嗎?
為了控制對操作的訪問,我建議使用Action Access ,它歸結為:
class UsersController < ApplicationController
let :admin, :all
let :user, [:index, :show]
# ...
end
這將自動鎖定控制器,允許管理員訪問每個操作,用戶只顯示或索引用戶,其他任何人將被拒絕並重定向到警報。
如果您需要更多控制權,可以使用not_authorized!
內部操作以檢查和拒絕訪問。
它完全獨立於身份驗證系統,無需User
模型或預定義角色即可運行。 您所需要的只是設置當前請求的許可級別:
class ApplicationController < ActionController::Base
def current_clearance_level
session[:role] || :guest
end
end
您可以在此處返回應用程序所需的任何內容,例如current_user.role
。
雖然它不是必需的,但它捆綁了一組方便的模型添加,允許執行以下操作:
<% if current_user.can? :edit, :team %>
<%= link_to 'Edit team', edit_team_path(@team) %>
<% end %>
這里:team
引用TeamsController
,因此只有當前用戶有權訪問TeamsController
的edit
操作時TeamsController
顯示該鏈接。 它還支持名稱空間 。
您可以默認鎖定控制器,自定義重定向路徑和警報消息等。
這非常簡單易行,我希望你覺得它很有用。
我們現在使用的建議是petergate gem。 易於使用,外觀非常干凈,具有良好的導軌感。
適用於設計 。
以下是自述文件中的一些示例。
如果您正在使用設計,那么您很幸運,否則您將不得不在項目中添加以下方法:
user_signed_in?
current_user
after_sign_in_path_for(current_user)
authenticate_user!
這來自你的User.rb. 添加更多角色就像將它們添加到陣列一樣簡單。
petergate(roles: [:admin, :editor], multiple: false)
實例方法
user.role => :editor
user.roles => [:editor, :user]
user.roles=(v) #sets roles
user.available_roles => [:admin, :editor]
user.has_roles?(:admin, :editors) # returns true if user is any of roles passed in as params.
控制器訪問語法。
access all: [:show, :index], user: {except: [:destroy]}, company_admin: :all
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.