我正在为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调用之前运行一些东西......
所以我的问题:
答案 0 :(得分:2)
我不会做一系列管理员,这比让Salesforce管理权限要麻烦得多。如果您只想限制非管理员个人资料用户,我首先要在用户模型上创建is_admin
列,并为用户提供访问权限。
我假设您的系统管理员位于单个配置文件中,您可以通过调用Salesforce API在用户创建过程中获取用户配置文件来确定用户是否为管理员。
但是,老实说,我会让Salesforce处理用户权限。您最终会在应用程序中注入大量复杂性来管理一个小的UX问题。
编辑 - 如何限制对ConnectedApp的访问:
选择ConnectedApp并单击编辑
在OAuth策略下,将允许的用户下拉菜单更改为&#34;管理员批准的用户已被预授权&#34;并保存