关闭

CQ----重写某个动作的操作权限

标签: sessionbasicfunctionqueryfilteraccess
646人阅读 评论(0) 收藏 举报
分类:
 
 
       动作权限管理以前的做法是在动作的后面选择组,这个组的里面的人就可以进行这个操作,但现在要根据记录是需求的 还是 缺陷的来决定能不能进行这操作,如果这个记录是需求的,就不能进行缺陷的操作,如果这个记录是需求的就不能进行缺陷的操作。因为这个要求,就不可能简单的配置出来了,要使用脚本重写这个动作的权限,包括检查:
1.       登入者能不能进行提交缺陷的操作,能不能进行提交需求的操作
2.       如果登入者即有提交缺陷的操作权限,又有提交需求的操作权限,那么要检查记录是缺陷的还是需求的,是缺陷的,就只能进行提交缺陷的操作,是需求的就只能进行提交需求的操作
 
设计:
条件:有“缺陷组”和“需求组”两个组
      “缺陷组”包含“缺陷人员”,“需求组”包含“需求人员”
      界面上有一个字段“记录类型”,可选值“缺陷”、“需求”
要求:
       缺陷组的人员执行“提交缺陷”动作,记录从“已提交”状态流转到“缺陷已提交”
       需求组的人员执行“提交需求”动作,记录从“已提交”状态流转到“需求已提交”
限制:
        在执行“提交缺陷”动作时,检查:
1.       登入者是否是“缺陷组”的人
2.       当前“已提交”界面上的“记录类型”值是“缺陷”
如果上面两项检查都是结果都是“是”,则可以执行“提交缺陷”动作,否则不能执行该动作
 
执行“提交需求”动作时检查同理。
 
在CQ Designer上的操作步骤:
1.       用超级用户登入CQ Designer,并check out模板
2.       添加组、人员、关联的缺陷库 略,根据上面的条件来配
3.       添加字段“记录类型” 略,注意的是,type 选择 SHORT_STRING即可
4.       添加状态“缺陷已提交”、“需求已提交”和动作“提交缺陷”、“提交需求”,以及从“已提交”状态到“缺陷已提交”、“需求已提交”的配置 略
5.       配置“提交缺陷”的权限:
在“提交缺陷”后面type列选择“CHANGE_STATE”
Access Control列选择“BASIC”,其他列默认
双击“BASIC”字段,界面跳转到代码编辑界面,在其中写入代码。编辑好的整段代码在最后面。
6.       点工具条上的“√”检查代码有没有语法错误,调试,直到检查通过
7.       保存改动,并check in
8.       将这个改动同步到缺陷库中,并新建几个不同的记录来验证结果是否正确
9.       哈哈,大功告成,整了我一上午,第二次给CQ加代码,记录备忘!
 
  
 
Function Defect_AccessControl(actionname, actiontype, username)
 
rem 定义变量
       Dim session
       Dim loginName
 
      Dim sessionObj
      Dim queryObj
      Dim filterObj
      Dim resultSetObj
       Dim userInGroup
 
       Dim value_leix
    Dim leix_pand
 
 
rem 得到当前用户
 
'      Dim session
'      Dim loginName
        ' Get the session
      set session = GetSession
       ' Get the logon name
      loginName = session.GetUserLoginName
 
 
rem 判断登入者是否属于缺陷提交组
' Dim sessionObj
' Dim queryObj
' Dim filterObj
' Dim resultSetObj
 
' Initial
       userInGroup = 0
 
Set sessionObj = GetSession()
' start building a query of the users
Set queryObj = sessionObj.BuildQuery("users")
' have the query return the desired field of the user object(s)
queryObj.BuildField ("login_name")
 
' filter for members of group groupname (whatever group you want)
Set filterObj = queryObj.BuildFilterOperator(AD_BOOL_OP_AND)
filterObj.BuildFilter "groups", AD_COMP_OP_EQ, “缺陷组”
Set resultSetObj = sessionObj.BuildResultSet(queryObj)
 
' run it
resultSetObj.Execute
 
Do While resultSetObj.MoveNext = AD_SUCCESS
If loginName= resultSetObj.GetColumnValue(1) Then
userInGroup = 1
End If
Loop
 
 
rem 判断记录类型是否是缺陷
'      Dim value_leix
'      Dim leix_pand
 
      leix_pand= 0
        value_leix=""
 
    value_leix = GetFieldValue("记录类型").GetValue()
 
    If value_leix = "缺陷" Then
        leix_pand= 1
     End If
   
 
rem 如果记录类型是“缺陷”并且 登入者属于“缺陷组”,则可以进行提交缺陷的动作,
rem否则不能
 If leix_pand = 1 and userInGroup = 1 Then
         Defect_AccessControl = TRUE
 Else
        Defect_AccessControl = FALSE
 End If
 
End Function
 
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:287845次
    • 积分:5177
    • 等级:
    • 排名:第5301名
    • 原创:227篇
    • 转载:4篇
    • 译文:0篇
    • 评论:89条
    最新评论