找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 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

  1. <a

  2.       v-if="assigneeable"

  3.       class="js-sidebar-dropdown-toggle edit-link float-right"

  4.       href="#"

  5.       data-track-event="click_edit_button"

  6.       data-track-label="right_sidebar"

  7.       data-track-property="assignee"

  8.     >

  9.   {__('Edit')}

  10. </a>
复制代码

该权限又是在app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue 中声明传递的。
传递的这个变量是从 app/assets/javascripts/sidebar/stores/sidebar_store.js 这个 store 中初始化的。
这个 store中是没有 assigneeable 这个属性的, 所以需要在原有的代码框架中添加上。

  1. app/serializers/issuable_sidebar_basic_entity.rb

  2. class IssuableSidebarBasicEntity

  3.     expose :can_assignee do |issuable|

  4.       can?(current_user, :"assignee_issue", issuable.project)

  5. end

  6. app/helpers/issuables_helper.rb

  7.   module IssuablesHelper

  8.   assigneeable: issuable.dig(:current_user, :can_assignee),
复制代码

基本代码结构总结

前端基本上是依赖于 store 的数据来控制显示,这个 store 又根据模块进行了划分。我们当前关注的 assignee 权限属于 sidebar 模块,所以在 sidebar_store 中声明。
同时又是根据isssueable 这个变量的内容来做权限提取和判断。

总 结

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

0 个回复

您需要登录后才可以回帖 登录 | 立即注册