在 ASP.NET MVC 项目中设置具有不同帐户和视图的多个公司的最佳实践

Posted

技术标签:

【中文标题】在 ASP.NET MVC 项目中设置具有不同帐户和视图的多个公司的最佳实践【英文标题】:Best practice to set up multiple companies with different accounts and views in an ASP.NET MVC project 【发布时间】:2021-03-20 19:53:49 【问题描述】:

我正在使用 ASP.NET MVC 编写程序。这是一个简单的程序,允许调度员跟踪呼叫和现场单位的状态。

这就是令人困惑的地方,我希望得到一些关于最佳实践的建议。

每个公司的视图结构完全相同。页面基本上每次每个公司都是这样设置的:

------------------------------------------------------------
(Header) Company logo - (buttons to filter this company's data you see in the three tables below)
------------------------------------------------------------
New things to be dispatched table
------------------------------------------------------------
New things that have been dispatched
------------------------------------------------------------
Units you've filtered and are checking statuses for in a table.

很简单。然而,虽然每家公司都有相同的视图结构,但每个用户的数据会有所不同。例如,在标题中,用于过滤三个表格的徽标和按钮对于每个公司都会有所不同。

标题下方的表格将为每个公司提供不同的数据。

另外,我希望用户能够仅访问其公司的后端(仅为其公司添加/删除用户等)

不过,我会设置它,以便我可以为每个人使用相同的数据库和表。

这是我的问题。你会为每个公司设置一个新的视图来定制东西吗?例如,您是分配给 X 公司的员工。如果您登录并在表中拥有该分配,那么您将使用自定义数据和徽标加载您公司的视图。我担心的是冗余。基本代码将是相同的,所以如果我必须更新一些全局设置,我将不得不这样做数百次。

或者您是否使用一堆 if/then 语句设置一个视图...例如,如果员工属于 X 公司,请设置此徽标并允许访问此数据。如果员工属于公司 y,则设置其他徽标和数据等。问题是数百个 if then 内容和非常长的视图。

对此有最佳实践的想法吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我不太确定在你的情况下我会怎么做,这也取决于具体情况,原因如下:

如果这些不同的公司是您的不同客户,可能对 UI 有不同的要求,那么单独的 UI 将是有意义的。

另一方面,如果您期望他们要求不同的逻辑,那么不同的操作也可能会派上用场。

如果 UI 和逻辑预计对所有这些都保持相同(从长远来看通常情况并非如此),那么我会将徽标之类的图像以及所有这些内容存储在您的公司特定文件夹中wwroot 文件夹,将用户的公司信息存储在会话变量中,然后加载徽标等,如下所示:src="/@Session[companyId]/logo.png"

您可以像这样加载自定义的 javascript(例如渲染按钮),甚至将 companyId 传递给您加载表格内容等的 ajax 函数。

【讨论】:

谢谢。我计划让所有公司的 UI 和逻辑都保持不变。这是同一份工作,一切都应该是通用的。但你是对的。从长远来看,许多公司的情况可能会有所不同。因此,为所有这些设置一个新的 UI 可能是明智的。冗余让我有点焦虑。我无法想象尝试应用全局更新。对此有什么想法吗,或者如果需要,我是否必须做很长的路要走?此外,在这种情况下,您是否还会为这些 UI 设置新的控制器以防逻辑更改?我敢肯定,这些模型可以是相同的。 老实说,我认为将每家公司的 特定 前端存储在单独的文件夹中并不是一个坏主意,因为如果有一天你可以在 javascript 中创建元素 1客户希望它与众不同。例如,如果今天您有一个数据表,其中所有列的列数相同,而明天您需要它的列数不同,则只需根据客户需求通过 javascript 动态创建该数据表。 - 不知道你所说的全局更新是什么意思。 就全球而言,假设我们应用了更新并希望为所有客户端稍微切换布局 - 可能切换两个表(不太可能,但你永远不知道)。我猜我必须进去并一个一个地更新每个视图。如果每个客户都有特定的逻辑需求,您是否还会为每个 UI 构建和分配一个新控制器,或者只是将任何逻辑更改添加到家庭控制器?我感谢您的所有帮助。感谢您抽出宝贵时间。 所以 UI 的主要结构,我将留在剃刀视图中。我会在某个位置有一个<div id="table1"></div>。现在,当需要使用 JavaScript 动态创建此表时,您仍然可以始终在您的 html 中移动此 div,而无需更新每个 javascript。 我也不会急于制作单独的控制器,因为如果您动态创建自定义元素,您可以随时添加单独的控制器或动作,甚至只是参数,然后可以指向相应的控制器或动作其他比其他客户的元素。

以上是关于在 ASP.NET MVC 项目中设置具有不同帐户和视图的多个公司的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net mvc 中设置用户对每个应用程序的访问权限

在 asp .net CORE / MVC 6 应用程序中设置 Swagger 时出现 500 错误

在 asp.net MVC 中设置整数标头值

在 ASP.NET MVC 中设置默认 JSON 序列化程序

在 ASP.NET MVC Core 控制器的构造函数中设置 ViewBag 属性

在 ASP.NET Core 3 MVC Web 应用程序中设置路由