【问题标题】:Rails 3 permissions?Rails 3权限?
【发布时间】:2023-04-02 11:36:02
【问题描述】:

我目前有一个 Rails 应用程序,每个用户都有一个包含视频、照片等的个人资料。一切正常,但我无法将个人资料与另一个用户个人资料分开。

示例: 我有两个用户 Jack 和 bob。 Jack 个人资料网址是 jack.mysite.com,bob 个人资料网址是 bob.mysite.com。当杰克上传视频并且我访问网址 jack.mysite.com/videos 时,我只想看到杰克视频而不是鲍勃视频,反之亦然。

我如何告诉 Rails 在访问他们的个人资料网址时只向我显示用户上传的内容(视频、照片等)?

【问题讨论】:

  • 您使用什么进行身份验证(设计)?您如何存储照片和视频?如果您将媒体存储在具有“belongs_to 用户”的模型中并且使用了 devise,则只需查询属于“current_user”的视频。
  • 我正在使用设计,如果您不介意,您能写出一个示例查询吗?
  • 我假设您有一个“媒体”模型,其中包含您的照片和视频,并且您的媒体模型中有“belongs_to user”。然后,您的媒体模型中有一个名为“user_id”的列,您可以执行以下操作:Media.where(user_id: current_user)。但这不会很有帮助,除非你碰巧有我假设的确切设置。
  • 一个用户有一个个人资料,该个人资料属于_to :user and has_many :videos, Photos, etc.

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

确保您的视频和其他个人资料相关内容与用户模型具有belongs_to 关系。

当您访问像 jack.site.nl 这样的 url 并且只想显示 jacks 的东西时,您需要将子域作为约束传递给您的路由并在接收控制器中获取参数。你应该可以在你的控制器中做这样的事情:

user = User.find_by_username(params[:subdomain])
@videos = Video.where(user_id: user.id)

查看其中一个子域 Railscast 以获取更多详细信息 http://railscasts.com/episodes?utf8=%E2%9C%93&search=subdomain

当您需要限制每个用户的数据时,您应该检查http://railscasts.com/episodes/192-authorization-with-cancan

【讨论】:

    【解决方案2】:

    这有点抽象,但这是你必须做的:

    1.获取当前用户的个人资料,因为它与视频和照片有关联。

    # with devise gem:
    current_profile = User.profile # if your user has a profile
    # otherwise something messy like this maybe:
    # current_profile = Profile.where(user_id: current_user).first
    

    2。抓取属于当前用户个人资料的视频和照片。

    current_users_videos = Video.where( profile_id: current_profile )
    current_users_photos = Photo.where( profile_id: current_profile )
    # writing a scope on Video and Photo would be cleaner, btw
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多