如何仅允许用户访问其记录?

时间:2014-09-26 19:13:08

标签: c# visual-studio-lightswitch

我正在为Azure网站/ SQL订阅托管一个应用程序,该公司希望员工拥有用户名(表单身份验证),以便能够查看和执行与公司客户相关的应用程序中的所有内容,但也会喜欢让客户端使用用户名登录并读取仅适用于他们自己或他们的业务的记录。

我怀疑可以为每个执行此操作的实体设置过滤器或权限,但我不确定最佳方式或如何实现它。这个项目在C#。

如果有人能指出我正确的方向,我们将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

Beth Massi的视频演示了如何使用Filter事件处理程序执行此操作。 http://msdn.microsoft.com/en-us/vstudio/jj822934 只要每个实体/表具有一个或多个指示用户的列(或租户,如果是多租户),您就可以添加反映通过LS服务的所有访问的过滤器。

答案 1 :(得分:0)

首先,查看WebMatrix.WebSecurity,它将拥有所有基本成员,例如已经为您实现的当前登录用户和权限角色。获得这些信息后,您将检查每个控制器以查看用户是否具有足够高的权限来查看它,如果没有,则返回禁止的代码。

如果您需要更多信息,请告诉我

答案 2 :(得分:0)

@ Xpert360的响应是过滤数据访问方面的一个很好的起点,但是你真的需要确保在你走下这条轨道之前,按照你需要的方式构建数据。这里的关键字实际上是一个KEY值。您需要在某种用户引用和需要以这种方式限制的每个实体集之间创建外键。这样做有两种基本方法。

  1. 为此目的创建自己的Users表,并将其链接到aspnet_users表以标识相应的行(这意味着在将新记录插入Users表时,在管理上下文中访问Microsoft.LightSwitch.SecurityData.svc服务)< / LI>
  2. 在数据模型中包含dbo.aspnet_users表,并直接针对该表创建所需的外键。
  3. 在审核/分配/更新记录时,您需要拦截每个实体的插入,更新和删除方法,以添加指向目标用户记录的链接。

    在某些情况下,记录之间的关系需要是多对多的(例如,在医疗案例管理系统中,您可能需要大量的从业者来访问和更新患者的记录)。确保使用适当的交叉表实现这些关系。

    请注意,可以使用this.Application.User.HasPermission(Permissions。)构造在服务器端访问VS-LS中的角色分配。在客户端,您可以在SilverLight屏幕中使用非常相似的逻辑,但LS-HTML有一些javascript对象,您可以为此目的查询(我还没有机会在愤怒中使用)。