我目前正在构建一个基于AngularJS的复杂前端网站。 后端由PHP和MySQL提供支持。
我有两个问题,都是关于用户权限的。
您将如何设计用于存储用户权限的数据库模式? 将来我会想要添加预定义的权限(多个集合)并将它们用作免费/高级帐户类型。
您将如何在前端管理这些权限? 您何时可以获取/重新获取权限? 您将如何检查每种需要特权的方法?
我正在寻找一种智能解决方案,它不会限制我可以定义的权限数量,但如果没有定义,也会提供一组默认的基本权限。
关于SQL实现
这些权限应适用于特定公司的所有用户。
db模式是这样的:
根据我的理解,权限模式应如下所示:
用户权限处理
当用户登录公司时,权限与cookie / session /前端服务一起存储。
要在frond-end验证我使用的指令将当前用户权限与所需权限进行比较:
data-privilege required = 1 user = 1
关于后端部分,我目前正在向服务器发送带有每个请求的用户令牌。 此令牌已针对数据库进行验证。 我可以使用它来获取用户权限并存储它们,而不是检查用户是否可以访问/使用某个功能。
除了添加真/假权限外,我还需要支持数字权限,例如:限制某个列表中可查看项目的数量。
我在想什么? 我错过了什么吗?
要求
- 每间公司无限制的特权
- 默认权限应适用于所有公司
答案 0 :(得分:1)
快速回答:
我设计并实现了一个复杂的权限机制,该机制是基于角色的动词每个对象,具有继承性。它相当强大,是整个系统中众多功能的基础。免费和高级用户之间的差异是要求之一,它完全覆盖。所以这是你可能想要遵循的方向。不言而喻,这是服务器端逻辑。
当时,没有角度,但一般来说,在Angular中,最好做以下事情: A.有一个主要暴露单个调用的服务:isAuthorized(privilege-name)。 B.有一个指令(“needPrivilege ='privilege-name')使用该服务并根据其布尔结果显示/隐藏/禁用。不言而喻,它使用isAuthorized。 C.为使用该服务的路由添加逻辑,以限制对UI中页面的访问。
那是我的两分钱......
答案 1 :(得分:0)
我们在GoDisco找到的最佳解决方案实际上非常简单。
服务器端:
1.我们构建一个RESTful API
2.此RESTful API始终请求 access_key
,作为 OAuth
的简单实现
3.在每个请求中,我们检查用户是否具有访问此数据的权限,否则返回他" 401 ACCESS DENIED"
AngularJS方面:
$route
和$location
服务Restangular
模块来处理我们的RESTful请求Restangular
,我们可以将请求用作promise
来捕获错误。如果我们有任何401错误,我们会处理它。