并开始学习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 来做到这一点:
- 我有客人(只读)
- 我有用户(可以读取和创建、更新、销毁(如果他是作者))
- 我有一个管理员(可以读取、创建、更新、销毁)
注意我已经有角色表(有 2 个角色)和 3 个用户(1 个具有管理员角色,2 个具有用户角色)