lou 发表于 2020-4-22 16:40:02

Geek专栏:Gitlab 升级笔记 12.6.6

本帖最后由 lou 于 2020-4-27 11:28 编辑

Geek专栏:Gitlab 升级笔记 12.6.6


今天Geek专栏为大家带来
乐聚研发部黄怀贤的
“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 这个变量的内容来做权限提取和判断。

总 结

目前来说我维护的这个版本和官方的版本并没有太大的区别,同时也不考虑去做大的分叉。尽量是通过插件和根据现有框架来对一些细节进行调整。
目前调整的原则是,相对于官方鼓励开源,放权给开发者自主控制流程的方式来说,我维护的版本更接近于公司运作。自上而下的任务分发,自下而上的任务确认。不能保证每个人都能时刻遵守规范,但是通过机制,软件来确保项目开发的流程一直在规范中。
页: [1]
查看完整版本: Geek专栏:Gitlab 升级笔记 12.6.6