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 は、一部ではなく、レコード全体の編集などでユーザーを制限していると感じているため)

あなたの User モデルは

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) ユーザー タイプの選択 (使用が管理者などの場合) は、ドメイン ログインに属しているため、モデルに移動する必要があります。

ただし、表示/非表示またはアクティブ/非アクティブな html 要素はプレゼンテーション レイヤーに分類されるため、ヘルパー メソッドを使用することをお勧めします。

于 2012-04-10T17:48:43.610 に答える