0
각 사용자가 자신의 logg 만 생성, 읽기, 업데이트 및 삭제할 수 있도록 각 사용자를 인증하려고 시도합니다. 비계를 사용하여 로그를 만들었습니다. 나는 devise와 admin을 사용자의 불린으로 사용했다. LoggsController, User 모델, logg 모델 및 ability.rb를 가지고 있습니다. 모든 사용자가이 작업을 수행 할 수 있도록 레일 캐스트 비디오를 따라했습니다. 지금까지 관리자는 모든 것을 할 수 있습니다. 그러나 사용자는 내가 원하는 것을 할 수 없다.cancan을 통한 인증
class Ability
include CanCan::Ability
def initialize(user)
user||= User.new
if user.admin?
can :manage, :all
else
can :read, :all
can :create, Logg
can :update, Logg do |logg|
logg.try(:user) == user
end
end
end
end
내 모델과 컨트롤러
class User < ActiveRecord::Base
ROLES = %w[admin moderator author banned]
has_many :loggs
def role?(role)
roles.include? role.to_s
end
end
class Logg < ActiveRecord::Base
belongs_to :users
end
class LoggsController < ApplicationController
load_and_authorize_resource
before_action :set_logg, only: [:show, :edit, :update, :destroy]
respond_to :html
def index
@loggs = Logg.all
respond_with(@loggs)
end
def show
respond_with(@logg)
end
def new
respond_with(@logg)
end
def edit
end
def create
@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
보기
<% if can? :show, @logg %>
<%= link_to 'Show', logg %>
<% end %>
<% if can? :update, @logg %>
| <%= link_to 'Edit', edit_logg_path(logg) %>
<% end %>
<% if can? :destroy, @logg %>
| <%= link_to 'Destroy', logg, method: :delete, data: { confirm: 'Are you sure?' } %></p>
<% end %>
'admin? '의 정의는 무엇입니까? – kasperite
왜이 코드를 사용해보십시오 : ability.rb에서이 코드를 바꿀 수 있습니다'can : update, Logg do | logg | logg.try (: user) == 사용자 end'이 'can : update, user_id : user.id'입니다. 나는 그 사용자가 has_many loggs라고 가정하고있다 –
사용자가 loggs 컨트롤러에 user_id를 추가하고 추가하여 자신의 loggs 만 관리 할 수 있도록 문제를 해결했다. 그렇지 않으면 can : manage, Logg, : user_id => user.id하지만 여전히 색인 페이지에서 다른 로그를 볼 수 있으며 표시, 수정, 삭제 링크가 계속 표시됩니다. 나는 cancan 방법을 시도해 <% if can? : 생성, 로그 %> <% = link_to '새 로그', new_logg_path %> <% end %> – Mo2