将权限传播到 Javascript

Posted

技术标签:

【中文标题】将权限传播到 Javascript【英文标题】:Propagate Permissions to Javascript 【发布时间】:2010-09-19 16:07:34 【问题描述】:

我正在讨论将相当复杂的权限从服务器传播到 AJAX 应用程序的最佳方法,但我不确定最佳方法。

本质上,我希望定义我的权限,以便我可以一次性请求一整套权限,并适当调整 UI(UI 更改可能与禁用某些上下文菜单项一样低级)。当然,我仍然需要在服务器端强制执行权限。

所以,我想知道是否有人对最好的方法有任何建议

    维护权限并在服务器代码中使用它们 可以轻松访问 javascript 中的权限 不必为每个单独的权限向服务器发出往返请求

想法?

【问题讨论】:

【参考方案1】:

将它们编码为JSON。

【讨论】:

【参考方案2】:

如果您将权限结构作为 JSON 对象(或 XML,如果您愿意)传输到客户端,您可以使用客户端代码操作该对象,然后将其发送回服务器,服务器可以执行任何操作需要验证数据并将其持久化。

【讨论】:

这有点没抓住重点......我可以以我想要的任何格式来回发送,我意识到这一点。我要问的是如何最好地将服务器上定义的权限与客户端上的 UI 元素相关联。【参考方案3】:

我不一定认为它是最“正确”的解决方案,但是否可以将所有权限内容保留在服务器端,只提供更新的 UI 而不是某种 JSON 权限系统?

您必须根据您的应用预期的繁忙程度和密集程度来做出决定,但绝对值得以任何一种方式做出决定

【讨论】:

这将是 ASP.Net 的首选方法,但在任何类型系统的特定粒度上,拥有客户端控制也有优势。 比这更复杂;我实际上使用的是 ExtJS,所以一切都是在 JS 中预定义的。例如,该应用程序有 5 个“区域”,但只有某些用户可以访问这些区域,但我真的不想每次都渲染不同的 JS(并且可能会因为缺少元素 X 等而出现问题)。相反,我认为应该为每个人定义相同的 UI,但根据权限隐藏/显示。【参考方案4】:

如果您有一组明确的权限,例如“用户级别”或“用户类型”,您可以将值传递到隐藏字段中并通过 DOM 访问该值。如果您的权限更细化,您仍然可以这样做,但您要么有很多隐藏字段,要么必须将信息编码为 XML 或 JSON 或其他格式。

您可以将它们设置为位标志,以便您可以将单个数值与掩码进行或运算,以查看用户是否具有特定活动的权限。这将非常灵活,只要您不拥有超过 32 个左右的特定“权利”,就可以在一个非常小的包(基本上是一个 unsigned int)中对这些权利进行任何排列。

例如:

0x00000001 //edit permission
0x00000002 //create new thing permission
0x00000004 //delete things permission
0x00000008 //view hidden things permission
   .
   .
   .
0x80000000 //total control of the server and everyone logged in

那么具有0x000007 权限的用户可以编辑、创建和删除,但不能进行其他操作。

在任何一种情况下,我认为您都在正确的轨道上 - 每个页面调用发出一次请求,将权限存储在全局 JavaScript 数据结构中,然后从那里开始。 AJAX 很好,但您不想查询服务器以获取整个页面上的每个特定权限。您将在页面加载时执行一次,设置页面的显示并将值保存在全局变量中,然后在本地引用事件函数的权限。

【讨论】:

如果你将权限信息存储在一个全局的JS对象中,用户就不能在客户端机器上编辑/更改这个JS对象吗? 权限存储在 JS 中严格用于 UI 操作,而不是用于实际数据访问 - 例如,隐藏对选项卡 X 的访问或显示列 Y 等。 对于它的价值,我最终得到了这样的结果: var MyApp.canRead = function(entity, property) ...读取从服务器呈现的 JS 对象文字以确定对指定的实体... ;。权限在服务器上的表中定义,并通过 canRead() 函数呈现给客户端以供访问。

以上是关于将权限传播到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

关于linux权限提升的一些方法

Win7系统内怎么拒绝写入权限防范U盘病毒传播

Java - 如何将标头传播到 Spring OpenFeign

QML TableView 鼠标区域不会将点击传播到选择模型

使用传播将数组映射到对象

如何停止将事件从父 div 传播到子 div