Rails Admin i CanCan ograniczenie dostepu

Witam!
Mam stworzony panel w Rails Admin, do tego mam zainstalowany CanCan.

Mialo to dzialac tak jesli chce stworzyc nowy post musze sie zalogowac. Po zalogowaniu tworze post z panelu admina lub bezposrednio ze strony. Po tym jesli chce edytowac lub usunac post moge to zrobic tylko jesli go stworzylem lub jesli jestem superadmin.

W panelu Rails Admin za pomoca tego pliku ability udalo sie ograniczyc dostep do innych postow widac je ale nie mozna ich edytowac lub zmianiac. Niestety jesli sie zaloguje i nie wchodze w panel admina tylko dzialam bezposrednio http://localhost:3000/posts/4/edit moge edytowac post nawet jesli nie jestem jego wlascicielem.

Co radzicie ? Pewnie trzeba by stworzyc funkcje np sprawdz_wlasnosc i za kazdym razem sprawdzac? Czy to jest najprostrzy sposob?

Czy moze wykorzystac do tego
load_and_authorize_resource

W kontrolerze doralem dwie linie

before_filter :authenticate_user!, :only => [:new, :edit, :create, :destroy]
load_and_authorize_resource 

A w widoku

<% if can? :show, post %>
    <td><%= link_to 'Show', post %></td>
<% end %>
<% if can? :update, post %>
  <td><%= link_to 'Edit', edit_post_path(post) %></td>
<% end %>
<% if can? :destroy, post %>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
<% end %>

Po tych operacjach zniknely linki do show edit i destroy, jedynie jak jestem zalogowany jako superadmin widze je. W innym wypadku nie sa widoczne. A chcialbym aby user ktory stworzyl post mogl go edytowac.

a przeklej zawartość ability.rb , cancan dostarcza możliwość zdefiniowania które rekordy danego zasobu , użytkownik o podanej roli może edytować - bo jeżeli dobrze zrozumiałem twój post to o to właśnie pytasz.

przykład:

if user.role? "Publisher"
  can :manage, Article, user_id: user.id
end

przy takiej definicji uzytkownik z rolą Publisher będzie mógl zarządzać jedynie swoimi artykułami

Tak o to wlasnie mi chodzilo

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.role? :superadmin
      can :manage, :all
			can :access, :rails_admin
			can :dashboard 
    else
			can :access, :rails_admin
			can :dashboard 
      can :manage, Ad, :user_id => user.id
			can :read, Ad

    end
  end
end

Musisz dać po ‘else’:

can :manage, Post

Przydałoby się też pewnie sprawdzić, czy to post danego usera. Finalnie:

can :manage, Post, :user_id => user.id

Dzieki dziala.