私の質問は、「それは正しいことですか?」のように、絶対に理論的です。私は特にRailsとRuby全般に不慣れであり、RailsアプリケーションにCancan自動化ソリューションを使用しようとしています。
このような単純なコントローラー、関連付けられたビューのペア、およびDBテーブルを持つユーザーモデルがあると考えてみましょう。
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
end
目標は、「index」メソッドへのアクセスを管理者以外のすべてに制限し、通常のユーザーが自分のページのみを表示できるようにすることです。たとえば、id==5のユーザーがページ「users/5」を表示できるようにします。このスコープのために、Cancanの能力クラスを作成しました。ここにあります:
class Ability
include CanCan::Ability
def initialize user, options = {}
default_rules
if user
admin_rules(user) if user.role.eql? "admin"
player_rules(user) if user.role.eql? "player"
end
end
def admin_rules user
can :read, UsersController
end
def player_rules user
can :read, User do |user_requested|
user_requested.id == user.id
end
end
def default_rules
end
end
私の質問は次のとおりです。Userタイプの便利なものがない場合、「can」メソッドのオブジェクトとしてUsersControllerを使用する必要がありますか?コントローラの「index」メソッドで「authorize!:show、UsersController」を使用して後で適用します。それとも他の方法で行う必要がありますか?ご提案ありがとうございます。