Rails - 如何为用户提供特定帖子的编辑权限?

时间:2013-04-30 02:14:06

标签: ruby-on-rails authentication

对于我的应用程序,我有用户进行项目发布。每个帖子只能通过原始海报进行编辑。我想构建一个功能,允许原始用户给原始海报的其他用户选择访问/编辑权限。我该怎么做呢?

project.rb

class Project < ActiveRecord::Base
  ...
  belongs_to :user
  ...
end

user.rb

class User < ActiveRecord::Base
  ...
  has_many :projects
  ...
end

projects_controller.rb

class ProjectsController < ApplicationController
  before_filter :authenticate_user!, except: [:edit]

  def edit
    if current_user == Project.find(params[:id]).user || current_user.try(:admin?)
        @project = Project.find(params[:id])
    else
        redirect_to root_url
    end
  end

end

2 个答案:

答案 0 :(得分:0)

也许用户有类似的类别?

“管理员”,“一般用户”,“所有者”

代码示例将是

def check_owner
ret = false
if post.user_id = current_user.id
  ret true
end
end

答案 1 :(得分:0)

听起来像授权给我。如果它与某种授权访问权限进行编辑,那么我最好的选择是你用CanCan做到这一点。因此,您可以拥有一个管理员用户,该用户可以根据用户的角色授予用户特定的访问权限。 https://github.com/ryanb/cancan不确定这是否正是您所寻找的。因为我的意思是作为一个例子,你可以有效地在user_controller

中定义这样的内容
 def correct_user
    @user = User.find(params[:id])
    if current_user.role? :administrator
      #Allow admin to access everyone account
    else
      access_denied unless current_user?(@user)
    end
  end

使用CanCan,您可以通过以下操作在abilities.rb中定义访问权限:

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new # guest user
   # raise user.role?(:administrator).inspect
    if user.role? :administrator

      can :manage, :all
      can :manage, User

    elsif user.role? :employee
      can :read, :all

    end

  end
end

不是100%确定这是你的追求。希望这会有所帮助