动作权限管理以前的做法是在动作的后面选择组,这个组的里面的人就可以进行这个操作,但现在要根据记录是需求的 还是 缺陷的来决定能不能进行这操作,如果这个记录是需求的,就不能进行缺陷的操作,如果这个记录是需求的就不能进行缺陷的操作。因为这个要求,就不可能简单的配置出来了,要使用脚本重写这个动作的权限,包括检查:
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