cancan+deviseを学び始める
「ユーザー」テーブルがあります(デバイス)
「posts」テーブルがあります(「user_id」フィールド付き)
私は「役割」テーブルを持っています(「名前」フィールド付き)
- 1 - 管理者
- 2 - ユーザー
私はusers_rolesを持っています(「user_id」と「role_id」を使用)
「ユーザー」ロールを持つ2人のユーザーを作成します
「管理者」ロールを持つ1人のユーザーを作成します
user.rb
has_many :posts
has_many :users_roles
has_many :roles, :through => :users_roles
role.rb
has_many :users_roles
has_many :users, :through => :users_roles
users_role.rb
belongs_to :user
belongs_to :role
そして質問があります:
i create ability.rb
と
def initialize(user)
user ||= User.new
if user.persisted?
#loged in
can :read, Post
can :create, Post
can :update, Post , :user_id => user.id
can :destroy, Post , :user_id => user.id
else
#not logged
can :read, Post
end
私のビュー/投稿/index.html.erbで
<% @posts.each do |post| %>
<tr>
<td><%= post.user.email %></td>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', post %></td>
<% if can? :update, Post %>
<% if current_user.id == post.user.id %>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<% end %>
<% end %>
<% if can? :destroy, Post %>
<% if current_user.id == post.user.id %>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
<% end %>
</tr>
<% end %>
</table>
<br />
<!-- ???почему Post ? -->
<% if can? :create, Post %>
<%= link_to 'New Post', new_post_path %>
<% end %>
この場合、ユーザーがログインしているかどうかを確認します-彼は読み取りと作成、更新、破棄ができます(彼が autor の場合)、ユーザーがログインしていない場合(ゲスト)-読み取りのみ可能
しかし、それを行うために自分のability.rbを変更する方法がわかりません:
- 私はゲストを持っています(読むだけ)
- 私にはユーザーがいます(読み取りと作成、更新、破棄が可能です(彼がautorの場合))
- 管理者が 1 人います (読み取り、作成、更新、破棄できます)
私はすでにロールテーブル(2つのロールを持つ)と3人のユーザー(管理者ロールを持つ1人、ユーザーロールを持つ2人)を持っていることに注意してください