首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用恶果罐头?

如何使用恶果罐头?
EN

Stack Overflow用户
提问于 2014-12-08 11:33:15
回答 3查看 4.9K关注 0票数 5

我想给我的rails应用程序的用户权利。我有‘管理员’谁可以创建,更新和删除所有的帖子和评论,‘用户’谁可以创建和更新他自己的评论,‘客人’谁不能做这些。为此,我使用宝石‘设计’和‘癌症’。我理解‘设计’宝石,但我不理解‘癌症’。

在ability.rb类中,如何为这些用户(管理、用户、来宾)编写权限?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-08 11:52:12

Cancancan只允许为给定上下文定义权限。这个上下文可能是一个用户角色,它不是cancancan的一部分,因此角色必须由自己来定义。

定义用户角色的方法有多种,例如:

  • 作为一个Role模型,
  • Rails enum
  • 正如here所建议的,
  • 作为User模型的字符串属性。

这都取决于用例。如何定义能力的示例可以找到here。在你的例子中,它看起来像是:

代码语言:javascript
复制
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new

    if user.reviewer? #Just a logged user
      can :manage, Comment, { owner_id: user.id }
    elsif user.admin?
      can :manage, :all
    end
  end
end

class User < ActiveRecord::Base
  enum role: [ :reviewer, :admin ]
end
票数 6
EN

Stack Overflow用户

发布于 2014-12-08 11:48:32

您可以参考下面的rails强制转换http://railscasts.com/episodes/192-authorization-with-cancan

票数 1
EN

Stack Overflow用户

发布于 2016-01-15 14:48:16

如果要使用角色,请考虑Canard (https://github.com/james2m/canard),它将CanCanCan和RoleModel (model)结合起来。这给了你一个很好的组织方式来规定角色和他们的能力。

例如,如果您有一个用户模型,将角色设置如下:

代码语言:javascript
复制
class User < ActiveRecord::Base
  acts_as_user roles: [:supervisor, :manager, :writer]
end

然后,您可以为每个角色创建能力文件,包括基本用户(没有指定任何角色)和来宾(未登录)。

代码语言:javascript
复制
Canard::Abilities.for(:user) do
  can  :manage, User, id: user.id
  cannot  [:destroy], User
end

以上将允许用户更新自己的信息,但不允许用户删除自己的信息。他们也将不能访问任何其他用户记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27357087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档