通过Salesforce API调整允许的用户(使用Rails& Restforce)

时间:2014-12-22 12:12:11

标签: ruby-on-rails security oauth salesforce

我正在为salesforce实例创建一个连接的Rails应用程序。

我们的系统拥有大量用户和少数几个系统管理员。 Salesforce似乎通过用户个人资料来处理大部分CRUD权限,但我也想确保只有我批准的系统管理员才能登录'到应用程序,清除oauth并进行api调用。

我有一种感觉,如果不保证这一点,我们的其他用户就可以登录,但如果他们最终请求他们未设置通过salesforce权限查看的对象,则会出现错误。但那太乱了......我也不希望他们走得那么远。

是否有任何关于何时使用Oauth进行干预以确保应用并进行API调用的最佳做法/建议?

我正在使用优秀的Restforce Gem并使用omniauth来存储返回的用户详细信息。

我目前的想法是创建一个简单的数组:

@whitelisted_admins = [user1.uid, user2.uid, user3.uid]

然后在我的/models/user.rb中使用before_save检查user.name是否包含在数组中:

class User < ActiveRecord::Base
  def self.from_omniauth(auth)
    before_save { user.uid.in?(@whitelisted_admins) }
    where(auth.slice(:provider, :uid).permit!).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.oauth_token = auth.credentials.token
      user.refresh_token = auth.credentials.refresh_token
      user.instance_url = auth.credentials.instance_url
      user.save!
    end
  end
end

然后我可以在每次Restforce API调用之前运行一些东西......

所以我的问题:

  1. 将此作为哈希而不是存储在活动记录中是否存在安全隐患,这有多重要?
  2. 最好在Oauth,API调用......或两者中检查这一点吗? (作为默认情况,我正吓坏了......)

1 个答案:

答案 0 :(得分:2)

我不会做一系列管理员,这比让Salesforce管理权限要麻烦得多。如果您只想限制非管理员个人资料用户,我首先要在用户模型上创建is_admin列,并为用户提供访问权限。

我假设您的系统管理员位于单个配置文件中,您可以通过调用Salesforce API在用户创建过程中获取用户配置文件来确定用户是否为管理员。

但是,老实说,我会让Salesforce处理用户权限。您最终会在应用程序中注入大量复杂性来管理一个小的UX问题。

编辑 - 如何限制对ConnectedApp的访问:

  1. 转到ConnectedApp
  2. enter image description here

    1. 选择ConnectedApp并单击编辑

    2. 在OAuth策略下,将允许的用户下拉菜单更改为&#34;管理员批准的用户已被预授权&#34;并保存

    3. enter image description here

      1. 向下滚动到“个人档案”部分,单击“管理个人档案”,选择要授予应用程序访问权限的个人档案,然后保存
      2. enter image description here