我目前正在构建一个复杂的基于AngularJS的前端网站。后端由PHP和MySQL提供支持。
我有两个问题,都是关于用户权限的。
-
您将如何设计用于存储用户权限的数据库架构?将来,我将希望添加预定义的权限(几组)并将其用作免费/高级帐户类型。
-
您将如何在前端管理这些权限?何时获取/重新获取权限?您将如何在需要权限的每种方法上检查它们?
我正在寻找一个智能解决方案,它不会限制我可以定义的权限数量,但如果未定义任何权限,它还将提供一组默认的基本权限。
关于 SQL 实现
这些权限应应用于特定公司中的所有用户。
数据库架构如下所示:
- 公司(company_id等)
- 用户(user_id、company_id等)
据我了解,特权架构应如下所示:
- 特权(prev_id、prev_name)
- companies_privileges(company_id、prev_id)
用户权限处理
当用户登录公司时,权限与 Cookie/会话/前端服务一起存储。
为了验证前端,我使用一个指令将当前用户权限与所需权限进行比较:
需要数据权限=1 用户=1
至于后端部分,我目前正在向服务器发送每个请求的用户令牌。此令牌根据数据库进行验证。我可以使用它来获取用户权限并存储它们,而不是检查用户是否可以访问/使用某个功能。
除了添加真/假权限外,我还需要支持数字权限,
例如:限制特定列表中可查看项目的数量。
我的想法对吗?我错过了什么吗?
要求
- 每家公司
无限特权- 默认权限应适用于所有公司
快速回答:
-
我设计并实现了一个复杂的特权机制,该机制基于角色,每个对象动词,具有继承功能。它相当强大,是整个系统中众多功能的基础。免费用户和高级用户之间的区别是要求之一,它得到了完美的覆盖。所以这是你可能想要遵循的方向。不用说,这是服务器端逻辑。
-
那时候,没有角度,但一般来说,在角度中,最好做到以下几点:A. 有一个主要公开单个调用的服务:isAuthorized(特权名称)。B.有一个指令("needPrivilege='privilege-name'),使用该服务并根据其布尔结果显示/隐藏/禁用。不言而喻,它使用授权。C. 向使用该服务的路由添加逻辑,以限制对 UI 中页面的访问。
那是我的两分钱...
我们在GoDisco发现的最佳解决方案实际上非常简单。
服务器端: 1. 我们构建了一个 RESTful API 2. 这个 RESTful API 总是请求access_key
,作为OAuth
的简单实现 3.在每个请求中,我们检查用户是否具有访问此数据的正确权限,否则返回"401访问被拒绝"
AngularJS 端:
- 我们构建了一个"身份验证服务"模块
- 当用户登录时,我们在系统中缓存了他的角色
- 路由器检查
- 此服务是侦听
$route
和$location
服务 - 每个请求路由,我们的服务检查当前是否记录用户具有所请求路由的正确角色。我们只需在路由配置中定义允许的角色。
- 如果用户请求不允许的路由,我们会通过将他的路由更改为我们的错误路由来抛出错误。
- 此服务是侦听
- 休息捕获
- 我们选择使用
Restangular
模块来处理我们的 RESTful 请求 - 有了
Restangular
我们可以通过使用请求来捕获错误promise
.如果我们有任何 401 错误,我们会处理它。
- 我们选择使用