Ejemplo n.º 1
0
 /// <summary>
 /// 验证某个用户是否有访问CirculateItem的权限
 /// </summary>
 /// <param name="CirculateItem"></param>
 /// <param name="UserValidator"></param>
 /// <returns></returns>
 public static bool ValidateCirculateItemAuth(WorkItem.CirculateItem CirculateItem, UserValidator UserValidator)
 {
     if (UserValidator.ValidateAdministrator())
     {// 判定当前用户是否超级管理员
         return(true);
     }
     else if (CirculateItem.Participant == UserValidator.UserID ||
              CirculateItem.Delegant == UserValidator.UserID ||
              CirculateItem.Finisher == UserValidator.UserID)
     {// 判定当前用户是否和当前工作任务相关
         return(true);
     }
     else if (UserValidator.ValidateWFInsView(CirculateItem.WorkflowCode, CirculateItem.Participant))
     {// 判定当前用户是否可以查看指定流程模板的组织
         return(true);
     }
     return(false);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 验证权限
        /// </summary>
        /// <param name="UserValidator"></param>
        /// <param name="SheetDataType"></param>
        /// <param name="IsOriginateMode"></param>
        /// <param name="SchemaCode"></param>
        /// <param name="BizObject"></param>
        /// <param name="SheetMode"></param>
        /// <param name="WorkflowCode"></param>
        /// <param name="WorkItem"></param>
        /// <param name="InstanceContext"></param>
        /// <returns></returns>
        public static bool ValidateAuthorization(
            UserValidator UserValidator,
            SheetDataType SheetDataType,
            bool IsOriginateMode,
            string SchemaCode,
            DataModel.BizObject BizObject,
            SheetMode SheetMode,
            string WorkflowCode,
            WorkItem.WorkItem WorkItem,
            WorkItem.CirculateItem CirculateItem,
            Instance.InstanceContext InstanceContext)
        {
            if (UserValidator.ValidateAdministrator())
            {
                return(true);
            }
            // 业务对象表单
            else if (SheetDataType == SheetDataType.BizObject)
            {
                if (IsOriginateMode)
                {
                    return(UserValidator.ValidateBizObjectAdd(SchemaCode, null, UserValidator.UserID));
                }
                else
                {
                    if (UserValidator.ValidateOrgAdmin(BizObject.OwnerId))
                    {
                        return(true);
                    }
                    return(UserValidator.ValidateBizObjectAdmin(SchemaCode, null, BizObject.OwnerId));
                }
            }
            else
            {
                switch (SheetMode)
                {
                case SheetMode.Originate:
                    return(UserValidator.ValidateCreateInstance(WorkflowCode));

                case SheetMode.View:
                case SheetMode.Print:
                    if (WorkItem != null &&
                        ValidateWorkItemAuth(WorkItem, UserValidator, UserValidator.Engine.AgencyManager))
                    {
                        return(true);
                    }
                    else if (CirculateItem != null && ValidateCirculateItemAuth(CirculateItem, UserValidator))
                    {
                        return(true);
                    }
                    else if (UserValidator.ValidateWFInsView(WorkflowCode, InstanceContext.Originator))
                    {
                        // 是否允许查看这个流程模板的所有实例
                        return(true);
                    }
                    else
                    {
                        // 判定用户是否参与过流程实例
                        string[] workItems = UserValidator.Engine.Query.QueryWorkItems(
                            new string[] { InstanceContext.InstanceId },
                            new string[] { UserValidator.UserID },
                            DateTime.Now.AddYears(-100),
                            DateTime.Now.AddDays(1),
                            H3.WorkItem.WorkItemState.Unspecified,
                            OThinker.H3.WorkItem.WorkItem.NullWorkItemID);
                        if (workItems != null && workItems.Length > 0)
                        {
                            return(true);
                        }
                        return(false);
                    }

                case SheetMode.Work:
                    if (WorkItem != null)
                    {
                        return(ValidateWorkItemAuth(WorkItem, UserValidator, UserValidator.Engine.AgencyManager));
                    }
                    else
                    {
                        return(ValidateCirculateItemAuth(CirculateItem, UserValidator));
                    }

                default:
                    throw new NotImplementedException();
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 打开流程表单
        /// </summary>
        /// <param name="paramString"></param>
        /// <returns></returns>
        public JsonResult InstanceSheets(string paramString)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult(false, "");
                Dictionary <string, string> dicParams = JsonConvert.DeserializeObject <Dictionary <string, string> >(paramString);
                bool isMobile = false;
                foreach (string key in dicParams.Keys)
                {
                    if (key == Param_InstanceId)
                    {
                        InstanceID = dicParams[key]; continue;
                    }
                    if (key == Param_IsMobile)
                    {
                        bool.TryParse(dicParams[key], out isMobile);
                        IsMobile = isMobile;
                        continue;
                    }
                }

                if (InstanceContext == null)
                {
                    result.Message = "InstanceSheets_InstanceNotExist";
                    return Json(result, JsonRequestBehavior.AllowGet);
                }

                // 获取流程模板信息
                WorkflowTemplate.PublishedWorkflowTemplate workflow = this.Engine.WorkflowManager.GetPublishedTemplate(InstanceContext.WorkflowCode, InstanceContext.WorkflowVersion);
                if (workflow == null)
                {
                    result.Message = "InstanceSheets_WorkflowNotExist";
                    return Json(result, JsonRequestBehavior.AllowGet);
                }

                //WorkflowVersion,InstanceID,UserID
                DataTable dtWorkItem = this.GetItemTable(InstanceID);
                string activity, sheetCode;
                Dictionary <string, string> sheetWorkItemIds = new Dictionary <string, string>();
                //当前用户参与过流程时,则打开参与过的流程表单,否则打开系统流程表单
                if (dtWorkItem != null && dtWorkItem.Rows.Count > 0)
                {
                    foreach (DataRow row in dtWorkItem.Rows)
                    {
                        activity = row[WorkItem.WorkItem.PropertyName_ActivityCode] + string.Empty;
                        sheetCode = this.GetSheetCodeByActivity(((WorkflowTemplate.ClientActivity)workflow.GetActivityByCode(activity)));
                        if (!sheetWorkItemIds.ContainsKey(sheetCode))
                        {
                            sheetWorkItemIds.Add(sheetCode, row[WorkItem.WorkItem.PropertyName_ObjectID].ToString());
                        }
                    }
                }
                else
                { // 管理员,未参与过流程
                    foreach (WorkflowTemplate.Activity act in workflow.Activities)
                    {
                        if (act is WorkflowTemplate.ClientActivity)
                        {
                            sheetCode = this.GetSheetCodeByActivity(((WorkflowTemplate.ClientActivity)act));
                            if (!string.IsNullOrEmpty(sheetCode) && !sheetWorkItemIds.ContainsKey(sheetCode))
                            {
                                sheetWorkItemIds.Add(sheetCode, string.Empty);
                            }
                        }
                    }
                }
                if (sheetWorkItemIds.Count == 0)
                {
                    Instance.InstanceContext instanceContext = InstanceContext;
                    if (instanceContext != null)
                    {
                        // 未参与过流程,并且未设置默认表单,那么再获取默认表单
                        Sheet.BizSheet[] sheets = this.Engine.BizSheetManager.GetBizSheetBySchemaCode(instanceContext.BizObjectSchemaCode);
                        if (sheets != null && sheets.Length > 0)
                        {
                            foreach (Sheet.BizSheet sheet in sheets)
                            {
                                if (!string.IsNullOrEmpty(sheet.SheetCode) && !sheetWorkItemIds.ContainsKey(sheet.SheetCode))
                                {
                                    sheetWorkItemIds.Add(sheet.SheetCode, string.Empty);
                                }
                            }
                        }
                    }
                }
                WorkItem.WorkItem workItem = null;
                WorkItem.CirculateItem circulateItem = null;
                string url, workItemId;
                List <ListUrl> ListUrl = new List <ListUrl>();
                foreach (string key in sheetWorkItemIds.Keys)
                {
                    Sheet.BizSheet sheet = this.Engine.BizSheetManager.GetBizSheetByCode(key);
                    workItemId = sheetWorkItemIds[key];
                    if (workItemId == string.Empty)
                    {
                        url = this.GetViewSheetUrl(
                            sheet,
                            InstanceID,
                            SheetMode.View,
                            IsMobile);
                    }
                    else
                    {
                        workItem = this.Engine.WorkItemManager.GetWorkItem(workItemId);
                        if (workItem != null)
                        {
                            url = this.GetViewSheetUrl(
                                workItem,
                                sheet,
                                SheetMode.View,
                                this.IsMobile);
                        }
                        else
                        {
                            circulateItem = this.Engine.WorkItemManager.GetCirculateItem(workItemId);
                            if (circulateItem == null)
                            {
                                continue;
                            }
                            url = this.GetViewSheetUrl(
                                circulateItem,
                                sheet,
                                SheetMode.View,
                                this.IsMobile);
                        }
                    }
                    // 处理缓存
                    DateTime t = DateTime.Now;
                    url += "&T=" + t.ToString("HHmmss");
                    //只有一个表单直接跳转打开
                    if (sheetWorkItemIds.Count == 1)
                    {
                        result.Success = true;
                        result.Message = url;
                        result.Extend = "Redirect";
                        return Json(result, JsonRequestBehavior.AllowGet);
                    }
                    else //多个表单在界面上呈现连接选择打开
                    {
                        ListUrl.Add(new ListUrl
                        {
                            Title = "InstanceSheets_Sheet",
                            Text = string.Format("{0}[{1}]", sheet.DisplayName, key),
                            Url = url
                        });
                    }
                }
                result.Success = true;
                result.Message = "MultiSheets";
                result.Extend = ListUrl;
                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }