【问题标题】:Should I include my admin page into the angular project or should i create a seperate one?我应该将我的管理页面包含到 Angular 项目中还是应该创建一个单独的项目?
【发布时间】:2020-02-11 03:39:30
【问题描述】:

嘿,我正在为我的 SpringBoot 应用程序开发前端。 我刚刚开始学习 Angular。 如果我在同一个项目中创建管理页面,我不确定是否存在安全问题。

Admin- 和 User-Page 将共享大量代码,但其他任何人都不能访问管理操作(甚至数据)。

到目前为止我发现了什么: Should I create Two Angular projects for Admin and Users?

那么创建一个包含两个模块的 Angular 项目应该是正确的方法吗? 但是我该如何处理呢? 或者我可以只构建一个具有身份验证和管理员/用户角色的模块项目吗? 最佳做法是什么?

谢谢

【问题讨论】:

  • 将它们放在同一个项目中没有安全问题。不要依赖于阻止资源通过警卫加载或隐藏 url 作为安全方法,如果您需要保持数据安全,请始终使用身份验证保护您的端点。

标签: angular security project-structure


【解决方案1】:

我最近开发了一个项目,其中包含一组面向用户的页面和一组管理页面。

我构建项目的方式大致如下:

|- AppModule
|-- app components
|-- app services
|-- app routing
|
|- SharedModule
|-- components
|
|- AdminModule
|-- admin components
|-- admin services
|-- admin routing

AppModule 和 AdminModule 都导入 SharedModule。 AdminModule 是从 AppRouting 中的根管理路径延迟加载的,如下所示:

{
  path: 'admin',
  canLoad: [AdminGuardService],
  loadChildren: () => import('../modules/admin/admin.module').then(m => m.AdminModule)
}

其中 AdminGuardService 是一个路由保护,用于检查当前用户是否具有管理员访问权限。

延迟加载模块的好处是它与 AppModule 分开编译,并且仅在我的管理路径被点击时由浏览器加载。我将所有特定于管理员的 http 调用保存在我的管理服务中,因此它们永远不会进入我的主应用程序包。

从安全角度来看,没有什么可以阻止非管理员用户猜测您的管理员网址,无论它是在同一个项目中还是在不同的项目中。我所有的后端授权都是由我的 API 完成的。因此,如果非管理员用户猜到管理员 url,他们将得到 401,我会将他们重定向回主应用程序。

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 2019-01-11
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多