gpt4 book ai didi

ruby-on-rails - Rails3 和 Devise 作为基本 CRM 的一部分

转载 作者:行者123 更新时间:2023-12-02 07:45:44 25 4
gpt4 key购买 nike

我们已经构建了一个自定义 CRM,用于在 Rails3 中管理我们的客户和订单,并设计了身份验证和 cancan 权限魔法。

公司有很多人、订单和发票。很简单。

最重要的是,我们通过设计让我们的用户可以登录等。

我真正想做的是将管理员用户和其他人结合起来——例如,我们有时希望客户登录。将管理员用户与普通用户分开似乎有点难?我们想指定客户可以登录以节省通过设计添加他们两次。

最初我虽然应该通过设备注册添加每个人,但我不确定这是正确的。

我希望有人尝试过这个或者可以分享一些建议。有没有一种好的、简单的方法可以实现这一点?

-- 编辑--

除了下面的答案,我已经更新以使其更清楚一些。

我们需要能够将用户添加到 CRM,而无需让他们成为管理员或必须向他们提供密码(该设计似乎坚持)。

  1. 使用空白/无密码创建客户/用户
  2. 如果客户需要登录,请标记管理员复选框并指定角色(通过 cancan)
  3. 取消选中管理标志应该禁止访问

目前,我们有一个独立于我们的设计用户列表的人员列表。我们想以某种方式结合。

最佳答案

我认为为所有类型的用户提供相同的模型没有问题。您只需定义用户角色,例如通过数据库列。

但在许多情况下,您需要的不仅仅是用户角色来拒绝或允许访问,例如,您还需要验证 current_user 是否请求了当前订单。所以你可以这样做:

假设你有这个模型:

class User < ActiveRecord::Base
devise :database_authenticatable, :confirmab...
...

def admin?
role == 'admin'
end
end

因此您可以通过模型中的某些方法验证用户角色,例如 admin?

现在可以使用Can Can进行授权了,一样可以see here如何定义你的能力。

能力等级:

class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end

了解 CanCan 的工作原理很重要:look here .

假设您想将参数添加到您的能力类中,允许您在加载页面之前验证数据库中的对象,允许或不允许用户访问。在您的 application_controller 文件中,放入如下内容:

  ...
def current_ability
@current_ability ||= Ability.new(params, current_user)
end
...

根据您的能力,更改初始化方法的参数并根据需要使用params:

class Ability
include CanCan::Ability

def initialize(params, user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
# Verify the record for atuhorization
can :manage, Order if Order.find(params[:id]).requester_id == user.id
end
end
end

关于ruby-on-rails - Rails3 和 Devise 作为基本 CRM 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com