新手问题 怎么样实现对于特定的 object 的 authorization?(用 cancan?)

cqcn1991 · 2012年11月04日 · 最后由 cqcn1991 回复于 2012年11月06日 · 2282 次阅读

比如说 我建立了 admin 这个 role 给某个 user,让他去管理某一个特定的 group.而不是整个 groups 这里的 ability 不太会写…… 之前有看到 forem 里面的源码有涉及 https://github.com/radar/forem/blob/master/app/models/forem/ability.rb can :read, Forem::Category do |category| user.can_read_forem_category?(category) end can :read, Forem::Topic do |topic| user.can_read_forem_forum?(topic.forum) && user.can_read_forem_topic?(topic) end

但是居然没找到这个这个具体函数写在哪了,晕死

希望哪位大大出来指点一下

class Ability
  include CanCan::Ability

  def initialize(user)

    @user = user || User.new # Guest user

    @user.roles.each do |role|
      send role
    end
  end

  def admin
    can :manage, Group, :user_id => @user.id
    ....
  end
end

#1 楼 @yorzi 这里的 user_id 应该就是 group 表里面的 user id 吧?表示归属的 很感谢,也确实很不好意思,自己漏看了 CanCan 的 wiki

不知道我还能去哪里看些例子? 我感觉直接写起来还是有些困难(虽然真的很简单)

#2 楼 @cqcn1991 用 :user_id => @user.id 来限定 user 只能 manage 属于他的 groups, 多看看文档:

https://github.com/ryanb/cancan/wiki/Defining-Abilities

#3 楼 @yorzi 不知道还有没有更多的例子可看? 感觉直接写起来还是有些困难(虽然真的很简单),还需要多看些例子

#4 楼 @cqcn1991

先详细看看文档,各种情况都有说明,然后再找开源项目看看别人怎么写的。

#5 楼 @yorzi Edited 本来有个问题,想问你里面的 block 是怎么回事 不过已经找到文档了……

#5 楼 @yorzi 今天试着写了一下,不知道这样行不行: 用户-group 关系(membership)包含 user_id, group_id, role 这样,在创建、加入 group 时,建立了 membership,并同时设定好 role

def admin can manage group do |group| group_id 就设定成@user当 admin 的 group 的 id

但是具体不知道怎么写额,不知道能否写一下

不知道把 role 放在关系表中是否是 CanCan 的使用方式?但是我觉得这样才对啊。不然不太可能实现 user 对 group 的管理

另外,想问一下你 1 楼的代码里 @user.roles.each do |role| send role end 这个是什么意思

需要 登录 后方可回复, 如果你还没有账号请 注册新账号