Gitlab 升级笔记 12.6.6

下载地址

docker pull carloswong1224/docker-gitlab:12.6.6

新增内容

根据在 Gitlab 12.5.6 中新增的自定义权限来控制前端页面显示内容。实现没有对应权限的用户在页面上无法编辑对应的功能,比如 assignee, 更改 due date。之前实现的是从后端控制,用户虽然在不能真实操作,但是页面显示是可以编辑的。为了提高体验,对前端页面进行了修改。

修改部分详解

修改思路

以 assignee 功能为例,前端的页面显示是由 app/assets/javascripts/sidebar/components/assignees/assignee_title.vue 这个源文件来实现的。

我们从以下的代码中可以看到是通过 assigneeable 这个变量的值来控制是否显示 edit 按钮。之前这里使用的是 editable,但这个 editable 的权限比较宽泛,是针对整个 issue 的编辑权限。现在我根据新增的 assignee 权限增加了一个对应的 assigneeable 用来细化某个人在可以对 issue 进行评论的时候不能进行 assignee

<a
      v-if="assigneeable"
      class="js-sidebar-dropdown-toggle edit-link float-right"
      href="#"
      data-track-event="click_edit_button"
      data-track-label="right_sidebar"
      data-track-property="assignee"
    >

  {__('Edit')}

</a>

该权限又是在 app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue 中声明传递的。

传递的这个变量是从 app/assets/javascripts/sidebar/stores/sidebar_store.js 这个 store 中初始化的。

这个 store 中是没有 assigneeable 这个属性的, 所以需要在原有的代码框架中添加上。

app/serializers/issuable_sidebar_basic_entity.rb

class IssuableSidebarBasicEntity

expose :can_assignee do |issuable|
can?(current_user, :"assignee_issue", issuable.project)
end

app/helpers/issuables_helper.rb

module IssuablesHelper

assigneeable: issuable.dig(:current_user, :can_assignee),

基本代码结构总结

前端基本上是依赖于 store 的数据来控制显示,这个 store 又根据模块进行了划分。我们当前关注的 assignee 权限属于 sidebar 模块,所以在 sidebar_store 中声明。

同时又是根据 isssueable 这个变量的内容来做权限提取和判断。

总结

目前来说我维护的这个版本和官方的版本并没有太大的区别,同时也不考虑去做大的分叉。尽量是通过插件和根据现有框架来对一些细节进行调整。

目前调整的原则是,相对于官方鼓励开源,放权给开发者自主控制流程的方式来说,我维护的版本更接近于公司运作。自上而下的任务分发,自下而上的任务确认。不相信每个人都能时刻遵守规范,但是通过机制,软件来确保项目开发的流程一直在规范中。

avatar

极客世界

乐聚机器人研发总监 | 黄怀贤