WF提供了一种用于对所有支持数据输入的活动的、基于角色的访问机制。工作流创建者可以完全控制如何创建角色和角色集合。这样将使创建者能够提供必
要的授权机制,在执行活动之前验证调用者的角色。比如WF中的WebServiceInputActivity 和 HandleExternalEventActivity活动。
WF中提供来两种方式:ActiveDirectoryRole(通过活动目录用户)和WebWorkflowRole(ASP.NET Role)。下面举例说明:
1.我们使用HandleExternalEventActivity活动来提供图书检索功能,当有人检索的时候会触发检索事件,只有会员才可以使用该功能。首先来定义事件参数:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Workflow.Activities; namespace CaryWFRole { [Serializable] public class BookEventArgs : ExternalDataEventArgs { public string ID { get; set; } public string Name { get; set; } public string Author { get; set; } public BookEventArgs() : base(Guid.NewGuid()) { } public BookEventArgs(Guid instanceID, string id, string name, string author) : base(instanceID) { this.ID = id; this.Name = name; this.Author = author; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Workflow.Activities; namespace CaryWFRole { [ExternalDataExchangeAttribute()] public interface ISearchBookService { event EventHandler<BookEventArgs> SearchBook; } }
3.实现该接口,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Principal; namespace CaryWFRole { public class SearchBookService:ISearchBookService { public event EventHandler<BookEventArgs> SearchBook; public void OnSearchRequest(Guid instanceId, string id,string name,string author, IIdentity identity) { BookEventArgs args = new BookEventArgs(instanceId, id, name, author); String securityIdentifier = null; WindowsIdentity windowsIdentity = identity as WindowsIdentity; if (windowsIdentity != null && windowsIdentity.User != null) securityIdentifier = windowsIdentity.User.Translate(typeof(NTAccount)).ToString(); else if (identity != null) securityIdentifier = identity.Name; args.Identity = securityIdentifier; Console.WriteLine("return book by: {0}", identity.Name); if (SearchBook != null) SearchBook(null, args); } } }
4.工作流设计如下:
通过设置检索事件(HandleExternalEventActivity)活动的的Roles属性来控制,只有该角色集合的用户才有权限。在工作流中我们只允许会员才可以做
检索,代码如下:
using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Drawing; using System.Linq; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.Runtime; using System.Workflow.Activities; using System.Workflow.Activities.Rules; namespace CaryWFRole { public sealed partial class BookWorkflow : SequentialWorkflowActivity { public BookWorkflow() { InitializeComponent(); } private WorkflowRoleCollection sAllowRoles = new WorkflowRoleCollection(); public WorkflowRoleCollection AllowRoles { get { return sAllowRoles; } } private void codeActivity1_ExecuteCode(object sender, EventArgs e) { WebWorkflowRole role = new WebWorkflowRole("会员"); AllowRoles.Add(role); } private void handleExternalEventActivity1_Invoked(object sender, ExternalDataEventArgs e) { Console.WriteLine("查询成功"); } } }
5.通过如下函数来创建角色和用户,代码如下:
static void CreateRoles() { if (!System.Web.Security.Roles.RoleExists("会员")) { System.Web.Security.Roles.CreateRole("会员"); string[] users = { "张三", "李四", "王五" }; string[] ClerkRole = { "会员" }; System.Web.Security.Roles.AddUsersToRoles(users, ClerkRole); } }
6.假设以张三的身份来检索,触发事件的函数如下:
static void SendSearchRequest() { try { string id = "001"; string name = "C#高级编程"; string author = "某某某"; GenericIdentity genIdentity = new GenericIdentity("张三"); sBook.OnSearchRequest(workflowInstanceId, id, name, author, genIdentity); } catch (Exception e) { Console.WriteLine("Exception message: {0}", e.ToString()); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Workflow.Runtime; using System.Workflow.Runtime.Hosting; using System.Security.Principal; using System.Workflow.Activities; namespace CaryWFRole { class Program { static SearchBookService sBook; static Guid workflowInstanceId; static AutoResetEvent waitHandle = new AutoResetEvent(false); static void Main() { CreateRoles(); using (WorkflowRuntime workflowRuntime = new WorkflowRuntime()) { workflowRuntime.StartRuntime(); Type type = typeof(BookWorkflow); ExternalDataExchangeService dataService = new ExternalDataExchangeService(); workflowRuntime.AddService(dataService); sBook = new SearchBookService(); dataService.AddService(sBook); workflowRuntime.WorkflowCompleted += OnWorkflowCompleted; workflowRuntime.WorkflowTerminated += OnWorkflowTerminated; WorkflowInstance instance = workflowRuntime.CreateWorkflow(type); workflowInstanceId = instance.InstanceId; instance.Start(); SendSearchRequest(); waitHandle.WaitOne(); workflowRuntime.StopRuntime(); } } static void OnWorkflowCompleted(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); } static void OnWorkflowTerminated(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); } } }
8.我们要配置aspnetdb数据库,app.config如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="SqlServerConnection" connectionString="Integrated Security = SSPI;server=.;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.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </roleManager> </system.web> </configuration>
9.执行结果如下:
发表评论
-
平淡的2007
2007-12-24 08:04 817早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1416今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 892[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 639[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 783[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1148[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 929当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 836Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 845在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 696我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1189MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 705本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 839本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 761WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1062由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 800[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 692[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 737[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1108一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 950首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
【WF编程系列之基于角色的授权】主要探讨的是在WF(Windows Workflow Foundation)框架下如何实现基于角色的授权,这是工作流系统中的一个重要概念,它涉及到权限管理、用户角色分配以及工作流执行过程中的访问控制...
爱普生WF-7111和WF-7621是两款常见的商务喷墨打印机,它们在办公室环境中被广泛使用,以提供高质量的打印、扫描、复印和传真功能。这些打印机采用爱普生的EcoTank技术,具有大容量墨水盒,降低了用户的打印成本。...
工作流在企业软件开发中扮演着重要角色,尤其在需要管理复杂业务流程的系统中,如ERP(企业资源规划)、CRM(客户关系管理)等。 压缩包内的两个文件名称: 1. "CON-TLC303_WF_DesignerReHosting.ppt" - 这个文件...
本例子旨在演示如何使用WF4.0的多书签功能来模拟简单的会签过程,会签在业务流程中常见于多个参与者需要对同一份文档或请求进行审批的情况。 会签过程通常涉及多个步骤和角色,每个角色都需要查看、评估并批准或...
清零软件在打印机领域中扮演着重要的角色。爱普生打印机的清零过程通常涉及到墨盒计数器和废墨垫计数器的重置。墨盒计数器跟踪墨盒的使用情况,当其达到一定数值时,打印机可能会提示更换墨盒,即使墨盒仍有余墨。...
工作流在软件工程中扮演着重要的角色,因为它可以帮助组织将复杂的业务逻辑和决策过程模型化。WF .NET 3.5 提供了多种工作流活动,如顺序流程、状态机流程、并行流程和交易流程等,这些活动可以组合起来构建出各种...
在本篇中,我们将深入探讨Web WF设计器的核心概念、功能以及其在IT领域的应用。 1. 工作流(Workflow)基础 工作流是指组织内部或跨组织的一系列任务和活动,按照预定的规则和顺序执行,以完成一项业务目标。WF...
WF(Windows Workflow Foundation)和WCF(Windows Communication Foundation)是微软.NET Framework中的两个核心组件,它们在企业级应用开发中扮演着重要的角色。本压缩包"WF_WCF_Samples.exe"提供了一系列示例,...
综上所述,SICK的WF Next槽型传感器以其卓越的性能和广泛的应用场景,在工业自动化中扮演着不可或缺的角色。了解其特点和技术参数,结合实际应用需求进行选择和使用,将有助于提升生产效率和产品质量。
书签在WF4.0中扮演着重要的角色,它允许工作流在执行到特定点时暂停,并在稍后恢复。这就像阅读一本书时放置的书签,标记了当前的进度。在工作流中,书签可以用来保存状态,以便于在需要时恢复执行,特别是在处理...
在这个系统中,WF可能被用来定义和自动化财务审批流程,例如,根据金额大小分配不同的审批级别,确保合规性和效率。工作流可以定义为一系列步骤,包括不同角色的审批、信息验证和任务分配,这些步骤可以根据业务规则...
在这个系统中,WF将帮助我们创建、实例化、执行和监控工作流实例,以满足批核流程的需求。 在ASP.NET环境中集成WF,开发者可以通过设计工作流模型来描述批核过程。这通常包括定义活动(Activities),如“发起审批...
WF在企业级应用开发中扮演着重要角色,尤其是在需要实现复杂业务流程的情况下。 - **应用场景**:WF可以应用于多种场景,比如审批流程管理、订单处理、发票审核等,通过WF技术可以极大地提高业务处理效率和准确性。...
在ASP.NET环境中结合WF,可以创建动态、灵活且可扩展的Web应用程序,实现复杂的业务流程自动化。 标题中的"asp.net工作流 基于wf"指的是使用ASP.NET技术,利用WF框架来开发工作流应用程序。WF提供了一个抽象的模型...
在这个示例中,可能会展示如何使用WCF服务来启动、管理和监控WF工作流,并且Silverlight客户端可以通过WCF接口与服务端工作流进行通信。 3. WF2Demo.rar:这可能是一个基于WF4(即WF的第四代版本)的示例,展示了WF...
变频器,全称是交流变频调速器...总之,"WF2.rar"中的WF2系列变频器说明书是理解和使用该系列变频器的重要参考资料,它将帮助用户从零开始学习如何配置、操作、维护和解决问题,确保变频器在各种工况下稳定高效地运行。
通过创建类的实例(对象),用户可以在程序中使用这些类提供的功能。 3. **常量和变量**:模块中可能会定义一些全局常量和变量,这些变量在整个程序中都可访问,常量用于存储不会改变的值,变量则用于存储会变化的...
在WF工作流中,本地服务组件(Local Service)扮演关键角色,它定义了业务与工作流组件交互的接口,实现了两者间的通信。系统工作流引擎基于WF运行时,提供了持久化、可靠性和事务处理等功能,确保流程的顺利执行。...