开始VS 2013中LightSwitch系列的第5部分:我可以使用用户权限控制访问吗?

[原文发表地址] Beginning LightSwitch in VS 2013 Part 5: May I? Controlling Access with User Permissions

[原文发表时间] 2013-12-18 9:19 AM

说明:这是受欢迎的开始LightSwitch系列文章之Visual Studio 2013的更新。之前的版本请参阅:

· Visual Studio 2012: Part 4: Too much information! Sorting and Filtering Data with Queries

· Visual Studio 2010: Part 4: Too much information! Sorting and Filtering Data with Queries


欢迎来到开始Visual Studio 2013中的LightSwitch 系列 的第五部分!从第1到第4部分中,我们了解了Visual Studio LightSwitch 中的实体关系屏幕查询。如果你错过了它们:

· Part 1: What’s in a Table? Describing Your Data

· Part 2: Feel the Love - Defining Data Relationships

· Part 3: Screen Templates, Which One Do I Choose?

· Part 4: Too much information! Sorting and Filtering Data with Queries

在这篇文章中我想谈谈用户权限,也被称为访问控制。在大多数商务应用程序中,通常由于不同的职位功能或角色,我们需要限制系统中的用户可以访问哪些资源。例如,只有系统管理员可以向系统添加新的用户。应用程序中的某些数据和屏幕可能很敏感,应被限制访问,除非该用户具有对该数据的权限。LightSwitch 能轻松地定义用户的权限,并提供实体和查询机制,从而允许你检查这些权限。

关于如何设置用户权限的视频演示,请参阅:How Do I: Set Up Security to Control User Access to Parts of a Visual Studio LightSwitch Application?

验证和授权

LightSwitch应用程序需要两块信息来确定哪些用户应具有系统的哪些权限。首先,系统需要验证用户是否可以访问该应用程序。这称为验证。 换句话说:"证明你是你所说的谁"。LightSwitch中有两个支持验证的 类型:WindowsForms。

Windows 验证是指应用程序基于Windows凭据而信任该用户。所以一旦用户成功登录到其 Windows 桌面中,这些凭据将自动传递到 LightSwitch 应用程序。Forms验证意味着应用程序请求一个自己的用户名和密码,完全独立于任何其它凭据。因此当你选择使用Forms验证时,一个登录屏幕将呈现给用户,用户每次访问该应用程序时,必须输入用户名和密码。

一旦用户进行身份验证了,应用程序可以通过阅读他们的用户权限来确定允许访问系统哪些部分。这被称为授权。换句话说:"现在,我知道你是谁,这些是你在系统中可以做的"。

LightSwitch使用ASP.NET身份提供程序模型,因此您也可以结合自己的自定义身份提供程序。了解更多信息请参阅Customizing LightSwitch User Management.

设置用户权限

这一切都始于项目属性中的Access Control(访问控制)选项卡。要打开它,在解决方案资源管理器中的主项目下双击“Properties”节点。

然后,选择Access Control(访问控制)选项卡来指定您想使用的验证类型,以及你想要定义的用户权限。

默认情况下,应用程序不会启用验证,所以在这里,你可以选择你要使用的身份验证类型。

使用Forms身份验证意味着您需要将用户名和加密的密码存储在LightSwitch数据库中。这种类型的身份验证适用于基于互联网的应用程序,在那里用户不在同一网络中,您需要支持除了Windows之外的其他操作系统。如果您正在部署为移动用户或ISP或Azure website or cloud service,那么你将需要选择窗体身份验证。

如果你的所有用户都在同一个网络/域或工作组,就像在内部的业务线应用程序的情况下使用Windows身份验证是适当的。这意味着,没有密码被存储到你的LightSwitch应用程序中。相应地Windows登录凭据被使用并自动传递给应用程序。在这种情况下,您也可以选择是否要设置特定的用户和角色或身份已验证的用户是否可以访问该应用程序。

对于Windows身份验证的两个最佳选择是:

• 给管理应用程序的Windows用户或动态目录组特殊权限和角色。(如果你选择Windows身份验证,它一直在启用状态.)

• 此外,让任何Windows用户访问我的应用程序的不受保护的部分。

接下来您可以在代码中定义用户权限,以便访问资源(接下来我们将通过一个示例演示)。一旦你您部署了该应用程序,SecurityAdministration权限总是为您定义好了,而由LightSwitch所使用。当您部署应用程序时,LightSwitch将创建一个具有此权限的单个用户,这将让他们可以访问所需的屏幕来定义系统中其余用户和角色。然而,在调试你的应用程序时,LightSwitch不会让您的账户登录,因为每次构建和运行应用程序(F5)时,这将是非常冗长乏味的。所以你可以使用“Granted for debug(授予调试)”复选框来指示设置哪些权限集应该在调试会话中打开/关闭。

注意:如果您已enabled SharePoint in your LightSwitch application,那么用户的管理是由SharePoint处理的。您可以通过使用Application.User对象的属性检查当前用户的SharePoint属性文件信息,包括他们的部件和角色。欲了解更多信息,请参阅Using the Person Business Type

让我们通过一个具体的例子:在我们的通讯录(联系人管理器)应用程序中实施一些我们已经建立的这一系列安全措施。

检查用户权限在地址簿中的应用

让我们从选择一个身份验证方案开始。在这个例子中,我会选择“Use forms authentication”,让每个对应用程序有访问权限的人都可以从任何外部网络或互联网上搜索并编辑联系人。然而,为了添加或删除联系人,用户将需要特殊权限才可以做到。

因此,我们需要创建两个新的权限。您可以将权限命名为任何你想要的。你只能在代码中看到名称。之后当系统管理员设置了用户和角色,他们会在屏幕上看到显示名称被描述的在那里。因此,添加两个权限; CanAddContacts和CanDeleteContacts。

下一步,为这两个权限取消勾选“授予调试”复选框,这样我们就可以测试他们是正常运行的。当你取消勾选它时,不会被授予此权限。这让我们在调试时方便地测试权限的组合。现在我们已经拥有这些权限设置了,我们需要在代码中检查它们。正如我所提到的,LightSwitch为你提供了方法机制,因此,当你需要各种自定义验证和商务规则,包括访问控制时,你可以编写代码。

有关在LightSwitch中编写代码的更多信息,请参阅库中的Performing Data-Related Tasks by Using Code

有关编写自定商务规则的详细信息,请参阅:Common Validation Rules in LightSwitch Business Applications

因此,为了执行安全性,我们需要编写几行代码来检查这些权限。LightSwitch提供关于实体和查询的访问控制方法,并在服务器上执行,让您的数据受到保护,无论是什么客户端阻断你的中间层。当你想限制查看(读),插入(添加),编辑或删除实体时,在数据设计器中打开该实体和下拉的“Write code”按钮,并选择适当的访问控制方法。

对于这种应用,选择Contacts_CanDelete方法,这将打开代码编辑器的方法存根。所有您需要做的是写一行代码(下面以粗体显示),以检查您设置的CanDeleteContacts权限:

VB:

 Namespace LightSwitchApplication 
 Public Class ApplicationDataService 
 Private Sub Contacts_CanDelete(ByRef result As Boolean) 
 'Add this one line of code to verify the user has permission to delete contacts: 
 result = Me.Application.User.HasPermission(Permissions.CanDeleteContacts) 
 End Sub 
 End Class 
End Namespace

C#:

 namespace LightSwitchApplication 
{ 
 public partial class ApplicationDataService 
 { 
 partial void Contacts_CanDelete(ref bool result) 
 { 
 //Add this one line of code to verify the user has permission to delete contacts: 
 result = this.Application.User.HasPermission(Permissions.CanDeleteContacts); 
 } 
 } 
}

现在回到设计器上的“Write code”按钮和选择Contacts_CanInsert,然后同样地编写以下代码行(粗体)来检查CanAddContacts许可。您的代码文件应该是这样的。

VB:

 Namespace LightSwitchApplication
 Public Class ApplicationDataService 
 Private Sub Contacts_CanDelete(ByRef result As Boolean)
 'Add this one line of code to verify the user has permission to delete contacts: 
 result = Me.Application.User.HasPermission(Permissions.CanDeleteContacts)

 End Sub 
 Private Sub Contacts_CanInsert(ByRef result As Boolean)
 'Add this one line of code to verify the user has permission to add contacts: 
 result = Me.Application.User.HasPermission(Permissions.CanAddContacts)
 End Sub 
 End Class 
End Namespace 

C#:

 using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.LightSwitch; 
using Microsoft.LightSwitch.Security.Server; 
namespace LightSwitchApplication 
{ 
 public partial class ApplicationDataService 
 { 
 partial void Contacts_CanDelete(ref bool result) 
 { 
 //Add this one line of code to verify the user has permission to delete contacts: 
 result = this.Application.User.HasPermission(Permissions.CanDeleteContacts); 
 } 
 partial void Contacts_CanInsert(ref bool result) 
 { 
 //Add this one line of code to verify the user has permission to delete contacts: 
 result = this.Application.User.HasPermission(Permissions.CanAddContacts); 
 } 
 } 
}

 

您可能会奇怪,为什么我们是在实体,而不是屏幕检查这些权限。在实体中检查权限保证了无论用户正在使用什么屏幕,数据操作都是被保护。如果您需要实现应用程序中的用户权限,您需要记住确保您的实体在服务器上。但是,如果您需要根据用户权限隐藏/禁用您的HTML屏幕的UI元素,这里有几个选项。请参阅:

· LightSwitch Tip: A Simple Way to Check User Permissions from the HTML Client

· Using LightSwitchServerApplicationContext and WebAPI to Get User Permissions

运行它!

现在,我们已经准备好测试应用程序,那么请编译并用F5运行。因为我们没有为调试授予CanAddContacts权限,如果您尝试添加联系人并保存数据,将显示一条错误消息。

如果回到您的项目属性的访问控制选项卡,您可以核对权限的组合,这样您就可以在调试时对它们进行测试。

用户和角色画面

为了在系统里设置用户和角色,应用程序需要被部署一个管理控制台。当您的应用程序在第一次被部署时,LightSwitch中会要求你输入管理员用户名和密码,它将部署到用户表,并授予SecurityAdministration权限。然后该管理员可以进入该系统的其他用户。

欲了解更多信息,请参阅:How to Assign Users, Roles and Permissions to a LightSwitch HTML Mobile Client

小结

正如你可以看到的,在Visual Studio LightSwitch中定义并检查用户权限是一个简单但重要的任务。访问控制是在专业的商务应用中非常普遍的要求,LightSwitch中提供了一个易于使用的框架,通过访问控制方法机制,锁定应用程序的所有部分。一旦您部署应用程序时,系统管理员可以开始设置用户和角色来控制访问应用程序的安全部分。

有关用户权限和部署应用程序的更多信息,请参阅LightSwitch Developer Center上的使用用户权限和部署LightSwitch应用程序的主题。

在接下来的文章中,我们将看到使用一些JavaScript和CSS自定义的HTML客户端。下次再见!

希望大家喜欢!