用户界面和管理界面是否应该在代码中分开(分开 类),或者是否应该通过 css 隐藏不需要的功能

Should user and admin interfaces be separated in the code (separate classes) or should the not needed functionnalities be hidden through css

好吧,我是网络开发的新手,但我已经掌握了 js/html/css 的窍门,并且我正在研究 game/website。我的工作基本上完成了,但我不确定我现在应该做什么

我想做的是使用与 user/player 相同的管理界面,但有一些限制。例如,假设 "admin" 可以向网站添加东西并四处移动等等,而玩家只能看到和使用它们,而不能编辑它们或向视图添加新项目。

此外,我在许多 html 页面上使用相同的界面,这就是为什么我觉得我必须问这个问题。

我应该克隆当前的 classes 并删除一些不需要的东西,还是应该只隐藏带有 css 和 html 的项目?

PS:网站很大,有很多classes,这就是我犹豫的原因。

我不知道是否应该提供任何代码,但我的问题的 示例 是:

克隆 classes - class "viewer" 用于管理员,class "restrictedViewer" 用于玩家

隐藏项目 - 只需使用 "display: none" <-- 这对某些项目不起作用,因为它们仅在某些交互发生时显示,我想说玩家可用的互动

覆盖开发人员工具中的某些 classes 非常容易,无需适当的权限即可访问管理功能。如果您担心安全问题,绝对不要使用简单的 "display: none" 隐藏管理面板。

我的做法是拥有一个特定的管理页面,只有拥有正确的凭据才能访问该页面。但是,这需要您拥有适当的授权系统。

我知道如果您只是想要一些额外的管理员按钮,这个解决方案并不是很有用。为了防止用户点击他们不应该点击的东西(因为他们在开发工具中搞砸了),您还应该找到一种方法来在点击按钮时检查凭据。在那种情况下,即使用户以某种方式能够显示按钮并单击它,他们也无法真正使用它。

另一种选择是让按钮由 JS 生成,并在该段代码中检查凭据以生成按钮以匹配用户的角色。这对 "hack" 来说有点棘手,因为您不能简单地在开发工具中切换 class 或 CSS 属性。当然,您仍然应该检查按钮处理程序中的凭据。

请记住,隐藏某些 HTML 元素并不是保护它们的好方法。您需要在每个步骤中验证用户凭据,包括处理。

对于 UI 这两种方法都可以。重要的是管理员可以访问一些非管理员看不到的页面。您为实现此目标而开发的任何机制都是有效的。

现在,还有一个非常重要的 Web 开发部分您还没有问过:授权授权,CSS不够。您必须假设用户拥有并知道如何使用 postmancurl 或 Chrome/Edge/Safari/Firefox 开发者控制台。这是一个有效的假设,因为这些是 Web 开发中的常用工具,并且您的用户中有很多(不是很多,但仍然很多)可能是 Web 开发人员。

必须让非管理员无法调用只有管理员才能访问的函数。

有多种机制可以做到这一点,并且大多数被认为是最佳实践的技术不需要您重复 类。它们通常涉及用户角色或权限机制。

最简单的实现是一个函数,它检查用户是否有权访问该页面,然后在控制器中首先调用该函数。根据您的框架,您还可以使用中间件来执行此操作,因为用户 role/permission/authorization 是一个横切关注点。某些语言可以使用 annotations/templates/macros 来标记具有权限的页面。

无论你实现什么机制,它都必须在服务器上完成,因为用户总是可以做:

curl http://your.website/some/admin/endpoint/to/restart/server

.. 访问页面(或直接在浏览器中输入)。有时您需要在前端实施一些奇特的验证或隐藏以获得更流畅的 UI 体验。没关系。但这并不意味着您不需要在后端也实施适当的授权机制。