新手问题 权限控制一般怎么做?比如帖子作者可以编辑、删除

twm · 2013年11月29日 · 最后由 chareice 回复于 2013年12月15日 · 3782 次阅读

比如本站的权限怎么做的呢?是用当前登录用户对比帖子 Owner 吗?还是有更高级的权限控制系统?

本站是用 cancan,不过我推荐用 before_filter

#1 楼 @Rei cancan 很好用啊

#2 楼 @jarorwar 不懂 ruby,能否简单说明一下它的工作模式?谢谢。 #1 楼 @Rei

#3 楼 @twm 一句“不懂 Ruby”已经把话题中断了,接下来要怎么讨论呢?

#3 楼 @twm 具体的工作原理需要 @Rei 来解释下。我也只是用用而已

#6 楼 @jarorwar 谢谢

#4 楼 @Rei 呵呵,我想清楚是基于角色的权限控制呢,还是我主贴中说的当前用户和帖子作者相等的对比。

#7 楼 @twm 取决于需求,Ruby China 是混合的,如果有 admin 角色就可以执行所有操作

if user.has_role?(:admin)
  can :manage, :all
end

普通用户就判断用户 id 是否相同

can :update, Reply do |reply|
  reply.user_id == user.id
end

有听说 cancan 逐渐失去维护,而且对 rails 4 支持并不好诶。

pundit 有人试过这个么..

#10 楼 @ruohanc 只知道 cancan 强大的说。。

#11 楼 @jarorwar 额...我是因为最近是在选....还没想好用哪个。关于 cancan 不给的文章在 这里

When upgrading an internal application to Rails 4, I discovered that CanCan does not play well with strong parameters. There are some patches to make things work, but they didn’t feel right. Also, CanCan hasn’t been given much love recently; it has the signs of an abandoned project: sporadic commits, many open issues/pull-requests, poor Code Climate score, etc.

#12 楼 @ruohanc 看上去 Pundit 不错啊,加上@xdite在 RubyConf 的演讲里也有提到这个了,准备试试看~

@ruohanc 哈哈。我抽空了解一下这个。学习一下,目前用 cancan

#10 楼 @ruohanc Rails 4 支持的,我现在有个新项目还在用的

#12 楼 @ruohanc cancan 的 load_resource 的确不兼容 strong parameters,但是这功能用得实在不多所以没什么大碍

▶ rolify◀ cancan用起来太复杂了

#17 楼 @dddd1919 #16 楼 @saiga #15 楼 @huacnlee #14 楼 @jarorwar #13 楼 @allenfantasy

最后,我用了 cancan. cancan 的文档各种齐全,各种辅助的方法也很完善,测试也很顺畅,而且完全兼容自定义的鉴权流程,另外也如 @saiga 所说,cancan 所不兼容 rails4 的功能确实用不到

'six' 挺不错的

#1 楼 @Rei 我觉得 cancan 用一个 ablitiy 放权限的挺方便,但是没有了解过before_action怎么方便呢?有没有相应的 demo,想了解一下。因为我现在的看法来说before_action来判断用户的权限,可是在 view 层的判断就需要每个地方用 if 来判断,然后修改的时候就专门找到那个地方来改,貌似不太方便的感觉。

#1 楼 @Rei cancan 本来就是个 before_filter 啊,难道不都是直接一个load_and_authorize_resource only: [ooo, xxx]这样用的么,还省得自己去给每个 actionModel.find param[:id],自己另写 before_filter 测试和修改起来都很麻烦……

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