我正在制作一个多租户应用,并希望在开始会话之前检查用户是否属于当前帐户。
我已经有一个名为" account_id"在用户模型中。
所以我需要知道的是检查User.account_id = current_tenant.id
有人可以告诉我该怎么做吗?
答案 0 :(得分:1)
如果我理解您的要求是正确的,那么您需要做的就是在config.request_keys = [:subdomain]
中设置initializers/devise.rb
。
或者,如果您使用多个模型并且不希望将其应用于所有模型,则可以直接在模型上进行设置:
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, request_keys: [:subdomain]
然后你可以用以下内容覆盖find_for_database_authentication
:
def self.find_for_database_authentication(conditions)
current_tenant = Account.find_by_subdomain(conditions[:subdomain])
where(email: conditions[:email], account_id: current_tenant.id).first
end
答案 1 :(得分:0)
我一直在研究类似的功能,虽然尚未对其进行排序。
简而言之,您正在查看authentication scoping。
这是,您确定围绕用户if(move_uploaded_file($_FILES["fupload"]["tmp_name"][$f], $path.$name)) {
$count++;
mysql_query("INSERT INTO product(id, product_name, image) VALUES ('$id','$_POST[productname]', '$name')");}
的登录信息:
account_id
对象是不同对象的依赖user
account
(通过account_id
),然后使用自定义subdomain
策略验证user
... < / LI>
-
根据Devise&#39;自述文件,您应该能够覆盖Warden
方法,但这只会验证用户是否存在特定数据...也许您可以使用它:
find_for_authentication
这将是#app/models/user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, request_keys: [:subdomain] #-> request key being a key from the "request" hash (request.subdomain)
def self.find_for_authentication(warden_conditions)
account = Account.find(warden_conditions[:subdomain]) #-> not sure
where(email: warden_conditions[:email], account_id: account.id).first
end
end
的范围,但不会验证该帐户是否有效。
为此,您需要使用自定义account_id
策略:Good ref
我可以更新我为监狱长策划所做的事情,但我还没有让它正常工作。