私はRailsを初めて使用し、ユーザーロールを作成してCancanで動作させる方法を理解するのに苦労しています。私はこれとcancanwikiにキャストされたrailsをフォローしています。私が理解していないのは、各ユーザーの役割を定義することです。たとえば、管理者、登録メンバー、ゲストがアクセスできるものなどです。自分のコーディングが正しい方向に進んでいるかどうかはわかりません。また、「未定義のローカル変数またはメソッド`roles_mask'」エラーが発生しました。
以下のファイルで役割が適切に設定されているとは思いません。役立つ場合は、ユーザー認証を最初から作成しました。私がこれまでに持っているセクションは、ギャラリーとユーザープロファイルです。新しいアカウントを作成し、ドロップダウンボックスオプション「管理者」を選択した場合、ATMには管理者権限がありません。私はまだページへのアクセスをロックアウトしています。
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if @user && @user.role?(:admin)
can :manage, :all
else
can :read, :all
end
if user.role? :user
can :manage, Profile
end
if user.role? :admin
can :manage, Profile
end
end
end
user.rb
ROLES = %w[admin user guest banned]
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end
def role?(role)
roles.include? role.to_s
end