【问题标题】:Devise with CanCan(can)用 CanCan(can) 设计
【发布时间】:2015-02-04 21:20:19
【问题描述】:

我似乎找不到这方面的好教程,而且我遇到了一些困难。

我正在使用带有基本 CRUD 应用程序的 rails 4.2.0。对于身份验证,我使用的是设计,对于角色,我使用的是 Cancancan,因为这些文档具有相当容易理解的文档。

我有两种类型的用户:

用户和管理员。

管理员可以与所有模型进行交互。添加-编辑-删除等

用户只能与某些模型进行交互。这将是一个预订系统。

我不太确定设置它需要经历的过程。我是否需要为每个用户类型生成完整的 rails 或者我可以只使用 Devise 生成?除此之外,我如何选择用户类型?到目前为止,我有两个有效的登录链接。

我遇到的主要问题是在 cancancan 中定义角色。

如有任何关于该主题的帮助/问题,我们将不胜感激。

【问题讨论】:

  • 为简单起见,您可以在 users 表中添加 admin 布尔列。使用 cancancan,您将使用 user.admin? 检查管理员用户。 github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
  • 因为到目前为止我只使用了“rails g devise user”命令,所以我没有类似的东西。这是否意味着我必须从完整的 rails 生成重新开始:'rails g scaffold user'等?
  • 不,您可以随时使用migrations 向表中添加其他列。我认为我在下面的回答应该可以帮助您开始实施这一点。我建议阅读Rails guides。它们非常广泛,并且确实有助于为您在 Rails 中的前进奠定良好的基础。

标签: ruby-on-rails devise cancan cancancan


【解决方案1】:

为简单起见,您可以在 users 表中添加 admin 布尔列。您将使用user.admin? 检查管理员用户。

这是迁移的样子。

> rails g migration add_admin_to_users

在您的迁移文件中,我会在运行之前将默认值设置为 false。

class AddAdminToUsers < ActiveRecord::Migration
  def up
    add_column :users, :admin, :boolean, null: false, default: false
  end

  def down
    remove_column :users, :admin
  end
end

默认情况下,您的用户不是管理员。但是,您可以使用 user.update_column(:admin, true) 轻松将用户设置为管理员。

有了这个,您应该能够关注 CanCanCan 文档,因为我相信它们非常广泛。

class Ability
  include CanCan::Ability

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

    if user.admin?
      # admin abilities
    else
      # non-admin abilities
    end
  end
end

http://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多