在Workflow工作流中怎么使用角色
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍在Workflow工作流中怎么使用角色,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!WF(Workflow)中提供来两种方式:ActiveDirectoryRo
千家信息网最后更新 2026年11月04日在Workflow工作流中怎么使用角色
这篇文章主要介绍在Workflow工作流中怎么使用角色,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
WF(Workflow)中提供来两种方式: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; } }}2.事件接口如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Workflow.Activities;namespace CaryWFRole{ [ExternalDataExchangeAttribute()] public interface ISearchBookService { event EventHandlerSearchBook; }}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 EventHandlerSearchBook; 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()); }}7.宿主程序如下:
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如下:
以上是"在Workflow工作流中怎么使用角色"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
会员
检索
事件
工作流
角色
工作
代码
用户
张三
活动
内容
函数
功能
只有
接口
篇文章
高级
成功
价值
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技股
互联网科技网
工业互联网科技新基建
朗新科技与工业互联网
齐家互联网科技
科技创新互联网企业
科技大学互联网专业好不好
济南和联互联网科技有限公司
广州优美互联网科技
互联网时代科技改变生活
互联网和黑科技的看法
港股科技和互联网
互联网数据科技专业
工业互联网展湾科技股份有限公司
21世纪互联网科技成就
互联网科技对化妆品行业
瑞安市蟠桃会互联网科技有限公司
科技互联网企业在行动
现代科技的标志之一的互联网
互联网科技创业有什么好项目
伟宏互联网科技
互联网科技工作委员会毛军
深圳期待互联网科技
互联网科技和法律行业
合肥互联网科技公司公章图片
互联网金融科技公司的优势
互联网营销推广黑科技
江苏互联网智能科技软件
上海创道互联网络科技有限公司
互联网科技包装股