我目前正在使用MEAN堆栈开发一个web应用程序。需要有一个面向客户的网站和管理网站的工作人员。它将有一个api,可以被双方使用,这将是很好的。
但是关于项目的结构,我应该为客户和管理人员提供一个不同的项目吗?或者我应该集成到一个项目,因为我需要只有一个域,这将有一个客户登录区和一个管理员。
如果有什么想法或建议就太好了。
谢谢
这取决于您的项目范围。我和我的团队目前正在进行一个MEAN项目,并将其作为一个单独的项目具体实施。这样做的目的是最大化整个应用程序的代码重用、可读性和一致性。将应用程序分散到多个项目中会增加违反上述原则的可能性,同时也会增加掩盖兼容性漏洞的风险,直到两个项目一起启动。
您需要为您的站点添加基于角色的授权。
在用户表中,添加一个用户类型字段,告诉我们用户是管理员还是客户。
确保在admin用户注册时正确设置该字段,而不是客户。
在整个应用程序中,您将需要基于授权的代码。在后端express代码中,为所有需要保护的模块添加一个中间件。这将是一个hasAuthorization函数,用于检查登录的用户类型,并允许请求通过或返回未经授权的响应。下面是向express路由添加hasAuthorization中间件的示例:
app.route('/emails/:emailId')
.put(users.requiresLogin, emails.hasAuthorization, emails.update)
.delete(users.requiresLogin, emails.hasAuthorization, emails.delete);
在前端angular代码中,根据用户类型显示和隐藏链接或菜单选项。如果您已经实现了身份验证,那么您可能已经有了登录用户并返回用户详细信息的身份验证服务。将返回的用户存储为作用域属性。选中此用户类型以显示和隐藏菜单和链接。你也可以使用它来加载不同的页面或模板。
如果您认为您的应用程序将来可能有多于admin和customer角色,那么它可能需要更详细地使用一个集合来定义每个角色可以访问的模块列表。hasAuthorization函数可以被传递一个模块名,它可以检查用户是否在一个有权访问它的角色中。
如果您的管理应用程序的外观和行为与客户站点截然不同,您可以为它创建一个单独的应用程序。它们仍然会共享数据库,因此您需要确保后端授权到位,以便用户不能操纵restful api进入管理模块。