2015-01-06 2 views
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 

답변

0

: 나는 loggs 컨트롤러가 원하는 : 세 문보다 can :manage, Logg, :user_id => user.id.

관련 문제