0

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

项目.rb

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

用户.rb

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

项目控制器.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
4

2 回答 2

0

也许用户有类似的类别?

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

代码示例将是

def check_owner
ret = false
if post.user_id = current_user.id
  ret true
end
end
于 2013-04-30T02:17:29.840 回答
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% 确定这是否是您所追求的。希望这无论如何都会有所帮助

于 2013-04-30T02:43:45.337 回答