访问权限 - Visibility Level
这个是在建立项目时就需要选定的,主要用于决定哪些人可以访问此项目,包含3种
- Private - 私有,只有你或属于该项目成员才有权限访问
- Internal - 内部,所有登录用户都可以访问
- Public - 公开,所有人都可以访问
在满足行为权限之前,必须具备访问权限(如果没有访问权限,那就无所谓行为权限了),行为权限是指对该项目进行某些操作,比如提交、创建问题、创建新分支、删除分支、创建标签、删除标签等.
角色
Gitlab定义了以下几个角色:
- Guest - 访客
- Reporter - 报告者
- Developer - 开发者
- Master - 管理员
- Owner - 拥有者
权限
不同角色,拥有不同权限,下面列出Gitlab各角色权限
行为 | Guest | Reporter | Developer | Master | Owner |
---|---|---|---|---|---|
创建issue | ✓ | ✓ | ✓ | ✓ | ✓ |
留言评论 | ✓ | ✓ | ✓ | ✓ | ✓ |
更新代码 | ✓ | ✓ | ✓ | ✓ | |
下载工程 | ✓ | ✓ | ✓ | ✓ | |
创建代码片段 | ✓ | ✓ | ✓ | ✓ | |
创建合并请求 | ✓ | ✓ | ✓ | ||
创建新分支 | ✓ | ✓ | ✓ | ||
提交代码到非保护分支 | ✓ | ✓ | ✓ | ||
强制提交到非保护分支 | ✓ | ✓ | ✓ | ||
移除非保护分支 | ✓ | ✓ | ✓ | ||
添加tag | ✓ | ✓ | ✓ | ||
创建wiki | ✓ | ✓ | ✓ | ||
管理issue处理者 | ✓ | ✓ | ✓ | ||
管理labels | ✓ | ✓ | ✓ | ||
创建里程碑 | ✓ | ✓ | |||
添加项目成员 | ✓ | ✓ | |||
提交保护分支 | ✓ | ✓ | |||
使能分支保护 | ✓ | ✓ | |||
修改/移除tag | ✓ | ✓ | |||
编辑工程 | ✓ | ✓ | |||
添加deploy keys | ✓ | ✓ | |||
配置hooks | ✓ | ✓ | |||
切换visibility level | ✓ | ||||
切换工程namespace | ✓ | ||||
移除工程 | ✓ | ||||
强制提交保护分支 | ✓ | ||||
移除保护分支 | ✓ |
更多权限请查看:http://doc.gitlab.com/ee/permissions/permissions.html
PS: 关于保护分支的设置,可以进入Settings->Protected branches进行管理
修改权限
在项目中,我想去限制developer的权限,比如不能让developer管理merge请求。
有一个办法就是直接修改Gitlab的源码,上述的行为权限都会定义在project_policy.rb文件中,我们只需要添加或删除相应的权限
rule { can?(:developer_access) }.policy do
enable :admin_board
# 管理merge请求行为
# enable :admin_merge_request
enable :admin_milestone
# 更新merge请求行为
# enable :update_merge_request
enable :reopen_merge_request
enable :create_commit_status
enable :update_commit_status
enable :create_build
enable :update_build
enable :create_pipeline
enable :update_pipeline
enable :read_pipeline_schedule
enable :create_pipeline_schedule
enable :create_merge_request_from
enable :create_wiki
enable :push_code
enable :resolve_note
enable :create_container_image
enable :update_container_image
enable :destroy_container_image
enable :create_environment
enable :create_deployment
enable :create_release
enable :update_release
end
PS: Gitlab版本号为12.3
project_policy.rb路径为/opt/gitlab/embedded/service/gitlab-rails/app/policies/project_policy.rb