WF 提供兩種角色提供者:
aspnetdb)。本文示範 WebWorkflowRole 完整設定與程式碼整合。
aspnet_regsql.exe 建立 aspnetdb。App.config 設定連線字串與 SqlRoleProvider:<connectionStrings>
<add name="SqlServerConnection"
connectionString="Integrated Security=SSPI;server=localhost\SQLExpress;database=aspnetdb" />
</connectionStrings>
<system.web>
<roleManager enabled="true" defaultProvider="SqlProvider">
<providers>
<add name="SqlProvider"
connectionStringName="SqlServerConnection"
applicationName="ConsoleAppSample"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
</system.web>
private void CreateRoles() {
if (!Roles.RoleExists("Personnel")) {
Roles.CreateRole("Personnel");
Roles.AddUsersToRoles(new[]{"Amanda","Jones","Simpson","Peter"}, new[]{"Personnel"});
}
if (!Roles.RoleExists("DeptManager")) {
Roles.CreateRole("DeptManager");
Roles.AddUsersToRoles(new[]{"Betty","Chris","Anil","Derek"}, new[]{"DeptManager"});
}
}
GenericIdentity identity("Betty"); // 實際取自登入驗證
// 透過外部事件 Activity 傳遞 identity 進工作流
// Workflow1.cs
public WorkflowRoleCollection eaInitiators = new WorkflowRoleCollection();
// 程式碼或設計器中加入角色
WebWorkflowRole role = new WebWorkflowRole("DeptManager");
eaInitiators.Add(role);
WF 執行階段在工作流啟動/事件傳遞時,檢查傳入 IIdentity 是否屬於 WorkflowRoleCollection 中任一角色,自動實現權限攔截。
IAuthorizationService 實現細粒度活動級授權。PrincipalPermissionAttribute 在活動程式碼宣告式授權。