jira权限限制给外部人员

jira里面的一些权限叨叨叨

jira权限限制给外部人员

最近有个需求是我们的jira需要开放给外包用户使用,这里分享下一些处理办法 和思路,希望对你有所帮助。

首先需要新建一个单独的组

比如wb组,用来区分jira-software-users,我发现我们同事都在这个组里面, 所以只要外包的人不在这个组里面就好了

至于怎么挪组,http://JIRA_URL/secure/admin/user/UserBrowser.jspa 这个地方搜索到用户,三个点编辑下组

可能能看到的部分

刚开始使用测试用户发现,很多东西都能看到,排查发现,有10个项目使用了 default scheme 大概在这个路径 http://JIRA_URL/secure/admin/ViewPermissionSchemes.jspa

关于权限规则有个坑就是,不填就是所有,所以我刚开始还很纳闷,为啥我都限 制了还能访问

最终通过对比发现,是在浏览项目那一栏点击编辑添加了用户组,明显申明

做完这个,就很少了

还发现有部分面板是公开的

看板我们大部分都是受限,所以我是手动改了的

看板

主要在于看板,刚开始研究rest api调用始终405,后来发现估计是experimental 或者是cloud才能用的,所以放弃了,开始考虑scriptrunner

最终参考网上,写了这个,就是遍历dashboard id并且设置组为jira-software-users

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import com.atlassian.jira.bc.portal.PortalPageService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.portal.PortalPage
import com.atlassian.jira.sharing.SharedEntity
import com.atlassian.jira.sharing.SharePermissionImpl
import com.atlassian.jira.sharing.type.ShareType
import com.atlassian.jira.bc.JiraServiceContextImpl



//def dashboard_ids = [10000,10104,10200,10201,10202,10203,10403,10500,10604,10401,10612,10701,10804,10805,10808,10809,10806,10811,10602,10803,11002,11001,11003,11004,11005,11000,11006,11007,11008,11009,10609,11100,11101,11200,11301,11306,11308,11400,11402,11501,10503,11506,11700,11704,11702,11711,11710,11712,11717,11600,12102,12301,12305,12400,11715,11716,12501,12502,12702,12706,12707,12708,12712,12714,12800,12801,12802,12804,13200,13901,14101,14201,14401,14700,15001,15200,15300,15002,14300,14100,14500,15700,15900,16100,16301,16300,16400,14000,16500,16701,16700,16705,17100,17101,17301,17302,17702,17703,18100,18101,18400,18401,18502,18503,18600,18601,19400,19403,19404,19500,20200,20201,20202,20203,20204,20205,20600,20601]
def dashboard_ids = [21002,21101]
dashboard_ids.each { item ->
def portalPageService = ComponentAccessor.getComponent(PortalPageService)
def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def context = new JiraServiceContextImpl(currentUser)


def sharePerm = new SharePermissionImpl(null, ShareType.Name.GROUP, "jira-software-users", null)
def sharePermissions = new SharedEntity.SharePermissions([sharePerm] as Set)
 def originDash = portalPageService.getPortalPage(context, item)

 def isFavorite = portalPageService.isFavourite(currentUser, originDash)

 def portalPageBuilder = new PortalPage.Builder().portalPage(originDash).permissions(sharePermissions)
 def updatedDash = portalPageBuilder.build()   
 portalPageService.updatePortalPage(context, updatedDash, isFavorite)
}

但是对于global如何获取呢,我没找到好方法,就直接去库里面去查看了

1
2
3
show tables like '%page%';# 确定表为portalpage
show tables like '%permissions%'; # 确定表为sharepermissions
select entityid from sharepermissions where sharetype='global' and entitytype='PortalPage';

最终拉出一个id列表,更新即可

总结

  • jira的api目前不是很完善,但是部分是可以用的

可以参考 https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-group-dashboards

  • jira api无法实现的可以尝试使用scriptrunner

scriptrunner本身有一些好用的脚本,也可以直接写,并不难 官网 https://docs.adaptavist.com/sr4js/8.18.0/get-started