0

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

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

  1. 您将如何设计用于存储用户权限的数据库模式?将来我想添加预定义的权限(几组)并将它们用作免费/高级帐户类型。

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

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

关于 SQL 实现
权限应适用于特定公司的所有用户。
db 架构是这样的:

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

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

  • 特权(prev_id,prev_name)
  • 公司特权(company_id,prev_id)

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

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

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

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

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

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

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

4

2 回答 2

1

快速回答:

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

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

那是我的两分钱...

于 2013-11-03T16:06:20.453 回答
0

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

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

AngularJS 方面:

  1. 我们构建一个“认证服务”模块
  2. 当用户登录时,我们在系统中缓存了他的角色
  3. 路由器检查
    1. 该服务是监听$route$location服务
    2. 每个路由请求,我们的服务都会检查当前登录的用户是否具有请求路由的正确角色。我们只需在路由配置中定义允许的角色。
    3. 如果用户请求不允许的路由,我们会通过将他的路由更改为我们的错误路由来向他抛出错误。
  4. 休息捕捉
    1. 我们选择使用Restangular模块来处理我们的 RESTful 请求
    2. 我们可以通过Restangular使用请求来捕获错误promise。如果我们有任何 401 错误,我们会处理它。
于 2013-11-03T23:31:58.047 回答