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

时间:2013-11-03 15:28:03

标签: php mysql angularjs privileges

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

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

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

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

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

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

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

    根据我的理解,权限模式应如下所示:

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

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

    要在frond-end验证我使用的指令将当前用户权限与所需权限进行比较:

      

    data-privilege required = 1 user = 1

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

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

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

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

2 个答案:

答案 0 :(得分:1)

快速回答:

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

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

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

答案 1 :(得分:0)

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

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

AngularJS方面:

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