首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

WF (Workflow Foundation) 權限控制實作:以 WebWorkflowRole 為例

     編輯:VC 教學

架構概覽

WF 提供兩種角色提供者:

  • ActiveDirectoryRole:整合 AD 使用者/群組。
  • WebWorkflowRole:整合 ASP.NET Membership/Role Provider(aspnetdb)。

本文示範 WebWorkflowRole 完整設定與程式碼整合。

資料庫與設定檔

  1. 執行 aspnet_regsql.exe 建立 aspnetdb。
  2. 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 在活動程式碼宣告式授權。
  • 審計記錄:記錄角色檢查結果供合規追蹤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved