程式|控制
WF提供許可權控制的功能,其中包括兩種方式:ActiveDirectoryRole(通過活動目錄使用者)和WebWorkflowRole(ASP.NET Role)。下面我以WebWorkflowRole的方式作為許可權控制例子做介紹,首先需要安裝aspnetdb資料庫(通過運行微軟提供的aspnet_regsql.exe檔案);App.config檔案配置如下:
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<connectionStrings>
<addname="SqlServerConnection"
connectionString="Integrated Security = SSPI;server=localhost\SQLExpress;database=aspnetdb" />
</connectionStrings>
<system.web>
<roleManagerenabled="true"defaultProvider="SqlProvider">
<providers>
<addname="SqlProvider"connectionStringName="SqlServerConnection"applicationName="ConsoleAppSample"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
</system.web>
</configuration> 通過下面的代碼產生角色: ///<summary>
///產生角色
///</summary>
private void CreateRoles()
{
if (!System.Web.Security.Roles.RoleExists("Personnel"))
{
System.Web.Security.Roles.CreateRole("Personnel");
string[] users = { "Amanda", "Jones", "Simpson", "Peter" };
string[] PersonnelRole = { "Personnel" };
System.Web.Security.Roles.AddUsersToRoles(users, PersonnelRole);
}
if (!System.Web.Security.Roles.RoleExists("DeptManager"))
{
System.Web.Security.Roles.CreateRole("DeptManager");
string[] users1 = { "Betty", "Chris", "Anil", "Derek" };
string[] DeptManagerRole = { "DeptManager" };
System.Web.Security.Roles.AddUsersToRoles(users1, DeptManagerRole);
}
}
假如用登入使用者"Betty"為部門經理角色,通過下面的代碼可以把登入使用者和許可權控制相結合:GenericIdentity genIdentity = new GenericIdentity("Betty ");通過調用外來事件Activity的方法把genIdentity作為事件的參數傳入流程中。
在流程定義的檔案中(Workflow1.cs)定義公開變數:
public WorkflowRoleCollection eaInitiators = new System.Workflow.Activities.WorkflowRoleCollection();
通過下面的代碼把部門經理角色增加到流程角色列表:
//裝載部門經理角色
WebWorkflowRole eaInitiatorsRole = new WebWorkflowRole("DeptManager");
eaInitiators.Add(eaInitiatorsRole); WF通過檢查傳入的登入名稱參數是否存在於流程角色列表的某個角色中來實現流程許可權控制。