起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 185|回复: 3

【结帖】项目中心责任人权限的问题

[复制链接]
发表于 2009-9-3 10:56:57 | 显示全部楼层 |阅读模式
项目列表页和工作项页有如下缺陷:
1、当前节点的责任人可以删除当前节点,应该是只能当前节点的编制人删除
2、非项目负责人(某个工作项的负责人)也能创建工作项,应该是当前节点的负责人只能创建当前节点的子节点,而不能创建同级别兄弟节点
回复

使用道具 举报

发表于 2009-9-7 14:32:23 | 显示全部楼层
问题1:当前节点的责任人可以删除当前节点,应该是只能当前节点的编制人删除
经确认,系统默认只允许项目创建人和控制人删除项目,如果要修改此规则,需要修改“项目库”的代码,形成定制版本,会为您后续升级带来不便。
static function TProjectUtils.GetProjectCanDelete(AContext: TContext;
  AProject: TProject): Boolean;
begin
  Result := GetProjectCanEdit(AContext, AProject);
  if Result then
    case AProject.State of
      TProjectState.psEditing,
      TProjectState.psExecuting:
//系统默认规则:只允许项目的创建人和控制人删除当前项目
        Result := AProject.Executors.Find([TProjectExecutorType.petCreator, TProjectExecutorType.petPrincipal],
          [], [], TProjectUtils.GetPersonMemberID(AContext), True) <> nil;
       else
        Result := False;
    end;
end;
回复 支持 反对

使用道具 举报

发表于 2009-9-14 12:37:15 | 显示全部楼层
2、非项目负责人(某个工作项的负责人)也能创建工作项,应该是当前节点的负责人只能创建当前节点的子节点,而不能创建同级别兄弟节点
项目中心-新增权限控制
   1、项目创建者、控制者可以创建所有工作项
   2、当前工作项的控制者可以新建子工作项,不允许新建一级工作项
   3、其他操作者无任何权限
   
1、业务系统\项目中心\工作项\工作项信息
  a、声明project
     FProject: TProject;
     property Project: TProject read FProject write FProject;
  b、增加函数,判断权限
  function GetOperateLevel(AProject: TProject; APlan: TPlan; AOperatorID: String): Integer;
var
  lExcutor: TProjectExecutor;
begin
  {在这里计算工作项的新建权限
   1、项目创建者、控制者可以创建所有工作项 20
   2、当前工作项的控制者可以新建子工作项,不允许新建一级工作项 10
   3、其他操作者无任何权限 0}
  if Assigned(AProject) and (AProject.Executors.Find([TProjectExecutorType.petCreator,
     TProjectExecutorType.petPrincipal], AOperatorID, false) <> nil) then
    Result := 20
  else if Assigned(APlan) and (APlan.PlanExecutors.FindPlanExecutor([TPlanExecutorType.petCreator,
     TPlanExecutorType.petPrincipal], AOperatorID, false) <> nil) then
    result := 10
  else result := 0;
end;
  c、根据权限控制action状态
   procedure TWBSINFO.ActionUpdate(Sender: TAction);
begin
  {jhm 控制新增权限}
  if SysUtils.SameText(Sender.Name, 'actPlanNewRoot') then
    Sender.Enabled := OperationEnabled('BIZ:\COLLABORATION\PLANOPERATIONGROUP.OPERATIONGROUP\NEWROOT.OPERATION') and
      (GetOperateLevel(Project, FPlan, TSystemCore.Operator.ID) > 0)
  else if StringUtils.PosAnsi('actPlanNewRoot_', Sender.Name) = 1 then
    Sender.Enabled := OperationEnabled('BIZ:\COLLABORATION\PLANOPERATIONGROUP.OPERATIONGROUP\NEWROOT.OPERATION') and
      (GetOperateLevel(Project, FPlan, TSystemCore.Operator.ID) >= 20)
  else if SysUtils.SameText(Sender.Name, 'actPlanNewSub') then
    Sender.Enabled := OperationEnabled('BIZ:\COLLABORATION\PLANOPERATIONGROUP.OPERATIONGROUP\NEWSUB.OPERATION') and
      (GetOperateLevel(Project, FPlan, TSystemCore.Operator.ID) >= 10)
  else if StringUtils.PosAnsi('actPlanNewSub_', Sender.Name) = 1 then
    Sender.Enabled := OperationEnabled('BIZ:\COLLABORATION\PLANOPERATIONGROUP.OPERATIONGROUP\NEWROOT.OPERATION') and
      (GetOperateLevel(Project, FPlan, TSystemCore.Operator.ID) >= 10)


2、业务系统\项目中心\面板功能\我的功能(项目中心)\我的项目
修改procedure TMYPROJECT.ViewModeChanged;
TProjectViewMode.vmProjectWBS:
      begin
        tbTab.Index := 2; // imgTab.Picture := imgTab4.Picture;

        pnlDocBarProject.Visible := False;
        pnlExecutor.Visible := False;
        cnrHeader.Height := tbTab.Height;

        RefreshWBSPage;
        dvWBS.Visible := True;
        dvWBS.BringToFront;

        pnlGrid.Visible := False;
        dvTask.Visible := False;
        dvDetail.Visible := False;
        dvDetail.Readonly := True;
        dvExcutors.Visible := False;
        dvDoc.Visible := False;
        dvResource.Visible := False;
        
        {jhm 控制新增工作项权限}
        InfoWBS.Project := InfoProject.Project;
      end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-14 15:34:09 | 显示全部楼层
OK!搞定!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 05:33 , Processed in 0.040512 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表