我非常好奇不同开发人员通常用什么策略来管理用户对单页 Web 应用程序不同部分的权限策略。
仅举一个例子:在单页 Web 应用中,我指的是只有一个 HTML(JSP、PHP 或其他)页面作为入口点,并且所有其他客户端 UI 组件/页面均由 JavaScript 构建的 Web 应用。
是否有任何最佳实践、方法或框架可以使这些事情更加简单明了?
让我们举个例子:
- 有一个单页 Web 应用程序,其中包括 2 个标签页:A 和 B - 每个选项卡都有 3 个组件(网格、按钮等):A1、A2、A3 和 B1、B2、B3 - 有 3 个用户组:U1、U2 和 U3 - U1 可以访问两个选项卡和所有组件 - U2 可以访问两个选项卡,但只能访问组件 A1 和 B1 - U3 只能访问选项卡 A 和此选项卡中的所有组件
一个表面上的解决方案是,在页面加载时(或使用单独的 AJAX 请求),构建一个全局 JS 对象并将用户组存储在其中。然后在代码中使用条件验证当前组并允许或限制特定功能。简化的示例如下所示:
index.html
我描述的方法的一个缺点是,用户可以在页面呈现后即时更改MyApplication.userGroup的值。只需打开控制台并输入:
小组U3的用户现在拥有U1的权限,并且可以在单击A1时查看私人信息。 好的,他仍然无法看到由于初始条件而未呈现在页面上的那些组件。但是他仍然可以访问这些后期检查条件可用的功能。
老实说,我有点惊讶在网络上找不到与此问题相关的任何具体信息。我错过了什么吗? 如果有人能分享解决这类问题的经验,那将很有趣。
更新:当然,不应由U2 U3组的用户执行的所有操作也不会在服务器上执行,因为服务器上也有安全检查。例如,即使黑客能够在前端显示按钮或字段,该操作也不会在后端执行。但是我要寻找的是根本不给予在前端进行此类操作的机会。
仅举一个例子:在单页 Web 应用中,我指的是只有一个 HTML(JSP、PHP 或其他)页面作为入口点,并且所有其他客户端 UI 组件/页面均由 JavaScript 构建的 Web 应用。
是否有任何最佳实践、方法或框架可以使这些事情更加简单明了?
让我们举个例子:
- 有一个单页 Web 应用程序,其中包括 2 个标签页:A 和 B - 每个选项卡都有 3 个组件(网格、按钮等):A1、A2、A3 和 B1、B2、B3 - 有 3 个用户组:U1、U2 和 U3 - U1 可以访问两个选项卡和所有组件 - U2 可以访问两个选项卡,但只能访问组件 A1 和 B1 - U3 只能访问选项卡 A 和此选项卡中的所有组件
一个表面上的解决方案是,在页面加载时(或使用单独的 AJAX 请求),构建一个全局 JS 对象并将用户组存储在其中。然后在代码中使用条件验证当前组并允许或限制特定功能。简化的示例如下所示:
index.html
<script type="text/javascript">
window.onload = function() {
MyApplication = {
userGroup : 'U3' // can be also U1 or U2. This value comes from server
};
}
</script>
然后在代码中,我们将进行如下检查:
if (MyApplication.userGroup == 'U1') {...}
if (MyApplication.userGroup == 'U1' || MyApplication.userGroup == 'U2') {...}
if (MyApplication.userGroup != 'U3') {...}
这个例子可以扩展到根据用户组以不同的方式处理事件的场景。假设A1是按钮,A1OnClickHandler是它的单击处理程序:
var A1OnClickHandler = function() {
if (MyApplication.userGroup == 'U1') {
console.log('A very private information');
} else if (MyApplication.userGroup == 'U2') {
console.log('Less private information');
} else if (MyApplication.userGroup == 'U3') {
console.log('Public information');
}
}
我描述的方法的一个缺点是,用户可以在页面呈现后即时更改MyApplication.userGroup的值。只需打开控制台并输入:
MyApplication.userGroup = 'U1';
小组U3的用户现在拥有U1的权限,并且可以在单击A1时查看私人信息。 好的,他仍然无法看到由于初始条件而未呈现在页面上的那些组件。但是他仍然可以访问这些后期检查条件可用的功能。
老实说,我有点惊讶在网络上找不到与此问题相关的任何具体信息。我错过了什么吗? 如果有人能分享解决这类问题的经验,那将很有趣。
更新:当然,不应由U2 U3组的用户执行的所有操作也不会在服务器上执行,因为服务器上也有安全检查。例如,即使黑客能够在前端显示按钮或字段,该操作也不会在后端执行。但是我要寻找的是根本不给予在前端进行此类操作的机会。