0
ability.rb를 살펴본 후. 나는 관리자가 (그 부분 작동)을 관리 할 수있게 허용했지만, 사용자가 단지 을보고 cancan을 사용하여 로그를 편집하는 것을 어떻게 허용합니까? 현재로서는 사용자가 을 볼 수 없으며 자신이 작성한 로그도 볼 수 없습니다. 그러나 관리자는 모든 것을 할 수 있습니다.사용자가 로그를 볼 수 없도록 logg에 대한 승인을받을 수 있습니다.
class Logg < ActiveRecord::Base
has_and_belongs_to_many :user
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
ROLES = %w[admin moderator author banned]
has_and_belongs_to_many :logg
끝이 난 더 사용자 컨트롤러가 없습니다. can :read, Logg, :user_id => user.id
def initialize(user)
if user.nil?
cannot :read, Logg
elsif user.admin?
can :manage, Logg
else
can :create, Logg, :user_id => user.id
can :update, Logg, :user_id => user.id
can :read, Logg, :user_id => user.id
end
end
하지만 그 모두가 아마 당신 자신 인 부여 : 당신은 당신이 만들거나 업데이트를 가지고있는 것처럼 즉, 자신의 Logg을 읽을 수 추가 할 필요가
class LoggsController < ApplicationController
before_action :set_logg, only: [:show, :edit, :update, :destroy]
load_and_authorize_resource
respond_to :html
def index
@loggs = Logg.all
respond_with(@loggs)
end
def show
respond_with(@logg)
end
def new
@logg = Logg.new
respond_with(@logg)
end
def edit
end
def create
@logg = Logg.new(logg_params)
@logg.save
respond_with(@logg)
end
def update
@logg.update(logg_params)
respond_with(@logg)
end
def destroy
@logg.destroy
respond_with(@logg)
end
private
def set_logg
@logg = Logg.find(params[:id])
end
def logg_params
params.require(:logg).permit(:name, :date, :time,
:whats_gone_well_this_week, :whats_not_gone_well_this_week,
:learnt_anything_new, :what_would_you_like_to_improve, :anything_else)
end
end
class Ability
include CanCan::Ability
def initialize(user)
if user.nil?
cannot :read, Logg
elsif user.admin?
can :manage, Logg
else
can :create, Logg, :user_id => user.id
can :update, Logg, :user_id => user.id
end
end
end