0

在 rails(使用 cancan 或其他方式)中,我希望登录用户能够编辑他们的一些数据库记录,但不是全部。

数据库看起来像这样:

User: name, password, team_id, role_id, notes
Role: name
Team: name

例如,如果current_user(登录的那个)有一个角色,user那么我希望他们能够做的唯一一件事就是更改他们自己的密码。我不希望他们能够重命名自己或改变他们的团队。我希望管理员能够添加关于他们自己和其他用户的注释,但不能添加关于其他管理员的注释。

我正在使用以下修改后的形式进行身份验证:

  1. http://railscasts.com/episodes/250-authentication-from-scratch
  2. http://railscasts.com/episodes/192-authorization-with-cancan

我正在考虑在以下内容中添加类似内容ability.rb

can :edit, User, :id => user.id

我的问题如下:

  1. 如何限制我希望他们访问的字段?
  2. 这应该去哪里,我在控制器而不是模型中思考。(因为我认为处理当前用户权限的东西不应该在模型层中)
4

2 回答 2

1

这是您可以查看的新内容,称为heimdallr,它几乎可以满足您的要求。这是一篇包含一些相关信息的文章。

于 2012-04-10T22:01:25.473 回答
0

1 - 如何限制我希望他们访问的字段?

假设你有上述简单的实现,我建议有一个简单的权限机制(因为我觉得 CanCan 也在限制用户编辑 / 等整个记录,而不是部分)

您的用户模型将是

class User < ActiveRecord::Base

  def admin?
    role_id == 1
  end

end

并且在显示列时尝试使用辅助方法来锁定文本框,您可能有一个辅助方法,例如

module UsersHelper
  def edit_name?
    current_user.admin?
  end
end

在你看来

f.text_field :name, :readonly => edit_name?

代码并不完美,但我想你明白了!

2)用户类型选择(如果使用的是admin等)应该去模型,因为它属于域登录

但是显示/隐藏或活动/非活动 html 元素属于表示层,最好使用辅助方法。

于 2012-04-10T17:48:43.610 回答