【发布时间】:2014-12-31 18:59:26
【问题描述】:
我最近完成了http://guides.rubyonrails.org/getting_started.html并添加了user authentication system,所以只有注册用户才能创建/删除博客文章/文章。但是,目前任何用户都可以删除任何文章。我想将文章的删除/销毁操作的访问权限限制为文章的所有者,即只有文章的所有者才能删除它。
更新我的代码文件如下所示,
Articles_controller.rb
class ArticlesController < ApplicationController
def destroy
@article = Article.find_by_slug(params[:id])
if current_user == @article.user
@article.destroy
end
redirect_to articles_path
end
Article.rb
class Article < ActiveRecord::Base
# user singluar form of model when using 'belongs_to'
# see this SO thread, http://stackoverflow.com/questions/16257116
belongs_to :user
用户.rb
class User < ActiveRecord::Base
has_many :articles
以及迁移文件,AddUserIdToArticles.rb
class AddUserIdToArticles < ActiveRecord::Migration
def change
add_column :articles, :user_id, :integer
add_column :users, :user_id, :integer
add_foreign_key :articles, :users
end
end
【问题讨论】:
-
到目前为止您尝试过什么?你有身份验证,现在你需要另一部分(授权)关于rails4.x,can can上的railscast有点过时,但你可以看看
pundit gem -
或者只使用 before_destroy 回调?
-
我正在研究这样的事情 => stackoverflow.com/a/17793864/708807
-
@Chris 一次性完成,是的,您可以使用 before_action 过滤器,或者您可以将对象查找范围限定为 current_user,因此它只会找到他们拥有的对象,等等……有很多方法可以做这个。
标签: ruby-on-rails ruby ruby-on-rails-4