【问题标题】:ASP.NET MVC 4 multi tenancyASP.NET MVC 4 多租户
【发布时间】:2012-07-23 20:34:25
【问题描述】:

在 ASP.NET MVC 4 中,我看到有 [Authorize] 属性和现在对应的 [AllowAnonymous] 属性,可以轻松让您需要身份验证才能访问特定的控制器操作。

我需要的是真正的多租户。每个用户只能访问自己的记录,除用户帐户外的所有记录都应归个人用户所有。

在作为 Rails 插件的 Hobo (http://hobocentral.net) 中,这很容易通过在我的 ApplicationController 中添加以下代码行来完成:

before_filter :login_required, :except => [:login, :signup, :do_signup, :activate]

然后在我的模型中:

belongs_to :owner, :class_name => "User", :creator => true

# --- Permissions --- #

def create_permitted?
  acting_user == owner || !owner_changed?
end

def update_permitted?
  acting_user == owner || !owner_changed?
end

def destroy_permitted?
  acting_user == owner || !owner_changed?
end

def view_permitted?(field)
  owner_is? acting_user or new_record?
end

最后在我模型的控制器中:

def index
  hobo_index current_user.modelName
end

是否存在如此简单和优雅的东西或内置在 ASP.NET MVC 中?到目前为止,我已经找到了几种在 ASP.NET MVC 中实现多租户的方法,但我不确定哪种方法显然是正确的。如果有帮助,我还打算使用 .NET 4.5 和 Entity Framework 5。

【问题讨论】:

    标签: asp.net-mvc multi-tenant hobo


    【解决方案1】:

    如果您在 asp.net MVC 中使用任何类型的内置身份验证,那么它已经存在,因为您可以使用类似

    HttpContext.Current.User.Identity.Name
    

    如果您没有使用某种内部身份验证机制,那么您可以执行我在验证用户时所做的简单操作,将主键保存在 session 变量中。

    Session["User"] = Key;
    

    在每个控制器内部取出变量

    var key = Session["User"];
    

    并根据密钥检索用户数据

    【讨论】:

    • 另外,您还可以考虑编写一个简单的 ModelBinder 来自动加载该信息,而无需使用魔术字符串
    • 谢谢。一行代码“HttpContext.Current.User.Identity.Name”并没有真正告诉我如何创建多租户应用程序。有教程、代码示例等吗?
    • 我同意 Jeremy 的观点,因为这个答案并没有试图涵盖如何进行真正的多租户。给猫剥皮的方法有很多,但这个答案不是其中之一。
    猜你喜欢
    • 2012-01-21
    • 2013-05-02
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多