JS(Angular) 前端用户权限与 PHP + MySQL 后端


JS(Angular) Front-End user privileges with PHP + MySQL Back-End

我目前正在构建一个复杂的基于AngularJS的前端网站。后端由PHP和MySQL提供支持。

我有两个问题,都是关于用户权限的。

  1. 您将如何设计用于存储用户权限的数据库架构?将来,我将希望添加预定义的权限(几组)并将其用作免费/高级帐户类型。

  2. 您将如何在前端管理这些权限?何时获取/重新获取权限?您将如何在需要权限的每种方法上检查它们?

我正在寻找一个智能解决方案,它不会限制我可以定义的权限数量,但如果未定义任何权限,它还将提供一组默认的基本权限。

关于 SQL 实现
这些权限应应用于特定公司中的所有用户。
数据库架构如下所示:

  • 公司(company_id等)
  • 用户(user_id、company_id等)

据我了解,特权架构应如下所示:

  • 特权(prev_id、prev_name)
  • companies_privileges(company_id、prev_id)

用户权限处理
当用户登录公司时,权限与 Cookie/会话/前端服务一起存储。

为了验证前端,我使用一个指令将当前用户权限与所需权限进行比较:

需要数据权限=1 用户=1

至于后端部分,我目前正在向服务器发送每个请求的用户令牌。此令牌根据数据库进行验证。我可以使用它来获取用户权限并存储它们,而不是检查用户是否可以访问/使用某个功能。

除了添加真/假权限外,我还需要支持数字权限,
例如:限制特定列表中可查看项目的数量。

我的想法对吗?我错过了什么吗?

要求
- 每家公司
无限特权- 默认权限应适用于所有公司

快速回答:

  1. 我设计并实现了一个复杂的特权机制,该机制基于角色,每个对象动词,具有继承功能。它相当强大,是整个系统中众多功能的基础。免费用户和高级用户之间的区别是要求之一,它得到了完美的覆盖。所以这是你可能想要遵循的方向。不用说,这是服务器端逻辑。

  2. 那时候,没有角度,但一般来说,在角度中,最好做到以下几点:A. 有一个主要公开单个调用的服务:isAuthorized(特权名称)。B.有一个指令("needPrivilege='privilege-name'),使用该服务并根据其布尔结果显示/隐藏/禁用。不言而喻,它使用授权。C. 向使用该服务的路由添加逻辑,以限制对 UI 中页面的访问。

那是我的两分钱...

我们在GoDisco发现的最佳解决方案实际上非常简单。

服务器端: 1. 我们构建了一个 RESTful API 2. 这个 RESTful API 总是请求access_key,作为OAuth的简单实现 3.在每个请求中,我们检查用户是否具有访问此数据的正确权限,否则返回"401访问被拒绝"

AngularJS 端:

  1. 我们构建了一个"身份验证服务"模块
  2. 当用户登录时,我们在系统中缓存了他的角色
  3. 路由器检查
    1. 此服务是侦听$route$location服务
    2. 每个请求路由,我们的服务检查当前是否记录用户具有所请求路由的正确角色。我们只需在路由配置中定义允许的角色。
    3. 如果用户请求不允许的路由,我们会通过将他的路由更改为我们的错误路由来抛出错误。
  4. 休息捕获
    1. 我们选择使用Restangular模块来处理我们的 RESTful 请求
    2. 有了Restangular我们可以通过使用请求来捕获错误 promise .如果我们有任何 401 错误,我们会处理它。