具有 PHP + MySQL 后端的 JS(Angular) 前端用户权限

Posted

技术标签:

【中文标题】具有 PHP + MySQL 后端的 JS(Angular) 前端用户权限【英文标题】:JS(Angular) Front-End user privileges with PHP + MySQL Back-End 【发布时间】:2013-11-03 15:28:02 【问题描述】:

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

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

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

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

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

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

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

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

权限(prev_id, prev_name) companies_privileges(company_id, prev_id)

用户权限处理 当用户登录公司时,权限存储在 cookie/session/前端服务中。

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

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

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

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

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

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

【问题讨论】:

没有信息可以帮助我们回答 2 个问题。 对不起,我打错了提交。 github 上的许多角度 auth 指令......看看它们是如何设置的应该会有所帮助。也检查这个目录ngmodules.org 您介意澄清一下这些权限是什么吗?用例和细节在这里真的很有价值。你想解决什么问题? 【参考方案1】:

快速回答:

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

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

那是我的两分钱......

【讨论】:

【参考方案2】:

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

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

AngularJS 方面:

    我们构建了一个“身份验证服务”模块 当用户登录时,我们在系统中缓存了他的角色 路由器检查
      此服务监听$route$location 服务 每次路由请求,我们的服务都会检查当前是否记录 用户对请求的路线具有正确的角色。我们只需在路由配置中定义允许的角色。 如果用户请求不允许的路由,我们会将他的路由更改为我们的错误路由,从而引发错误。
    休止符
      我们选择使用Restangular 模块来处理我们的 RESTful 请求 使用Restangular,我们可以通过使用promise 的请求来捕获错误。如果我们有任何 401 错误,我们会处理它。

【讨论】:

以上是关于具有 PHP + MySQL 后端的 JS(Angular) 前端用户权限的主要内容,如果未能解决你的问题,请参考以下文章

Angular js 单页应用环境搭建

mock.js后端不来过夜半,闲敲mock落灯花 (附Vue + Vuex + mockjs的简单demo)

(实用篇)在Mac下配置php开发环境:Apache+php+MySql

Sails.js 1.0:如何在没有Waterline的情况下连接和使用旧版MySQL数据库?

来自具有PubNub,可伸缩性和超过9000个聊天室的后端的实时用户通知

js基本语法总结