summaryrefslogtreecommitdiff
path: root/lib/gitlab/user_access.rb
Commit message (Collapse)AuthorAgeFilesLines
* Rename delete_protected_branch ability to push_to_delete_protected_branch to ↵Douwe Maan2018-04-101-1/+1
| | | | prevent confusion with destroy_protected_branch
* Validate `:push_code` before checking protected branchesbvl-port-ee-improvements-from-maintainer-pushBob Van Landuyt2018-03-081-6/+3
|
* Limit queries to a user-branch combinationBob Van Landuyt2018-03-071-3/+1
| | | | | The query becomes a lot simpler if we can check the branch name as well instead of having to load all branch names.
* Allow maintainers to push to a single branchBob Van Landuyt2018-03-071-1/+5
|
* Moved o_auth/saml/ldap modules under gitlab/authHoratiu Eugen Vlad2018-02-281-1/+1
|
* Port `read_cross_project` ability from EEBob Van Landuyt2018-02-221-1/+1
|
* Moves project creationg to git access check for git pushTiago Botelho2018-02-061-1/+2
|
* Introduce PredicateMemoization cop and fix offensesLin Jen-Shin2018-01-121-2/+8
| | | | with StrongMemoize
* Fix tests and fine tweak permission error messageLin Jen-Shin2017-07-191-2/+4
|
* Eliminate N+1 queries on checking different protected refsLin Jen-Shin2017-07-191-7/+23
| | | | | | | | | | | | | | | | | | | | | | I realized where the N+1 queries were actually coming from project.protected_branches, but how come we cannot preload this, or cache this at all? Then I found that this is somehow a Rails limitation. What we're doing before, eventually come to: project.protected_branches.matching But why it's not cached? (project.protected_branches.loaded? is always false) It's because matching is a class method, which is called on the proxy. In this case, Rails cannot cache the result. I don't know if this is possible to implement or not, because clearly this would require some tricks to implement class methods on associations. So instead, we could just pass project.protected_branches to ProtectedRef.matching, then it would work regularly. With this change, there's no more N+1 queries.
* Rename can_push_or_merge_to_branch? to can_update_branch?Lin Jen-Shin2017-07-181-1/+1
| | | | Also make sure pipeline would also check against tag as well
* Merge remote-tracking branch 'upstream/master' into 30634-protected-pipelineLin Jen-Shin2017-07-181-6/+6
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * upstream/master: (25 commits) Remove unneeded asserts and add tests for inactive RequestStore Rename the methods to make it fit with current name Follow feedback on the merge request Make sure it checks against the tag only when it's a tag Renamed Gitaly services fix transient rspec failure due to Poll.js race condition Refactor variables initialization in dropzone_input.js cache the cache key... avoid #respond_to? in Cache.id_for cache DeclarativePolicy.class_for at the class level Update 9.3-to-9.4.md fix padding on filtered search dropdown. Styles should only apply to li in list Cache Note#notable for commits and fix tests Add changelog entry Update the comments for the new functionality Use RequestStoreWrap for Commit#author Skip dead jobs queue for web hooks and project services Add RequestStoreWrap to cache via RequestStore Don't track cached queries in Gitlab::PerformanceBar::PeekQueryTracker Add changelog entry ...
| * Rename the methods to make it fit with current nameLin Jen-Shin2017-07-181-5/+5
| |
| * Follow feedback on the merge requestLin Jen-Shin2017-07-181-1/+1
| |
| * Add RequestStoreWrap to cache via RequestStoreLin Jen-Shin2017-07-171-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I don't like the idea of `RequestStore` at all, because it's just a global state which shouldn't be used at all. But we have a number of places calling `ProtectedBranch.protected?` and `ProtectedTag.protected?` in a loop for the same user, project, and ref whenever we're checking against if the jobs for a given pipeline is accessible for a given user. This means we're effectively making N queries for the same thing over and over. To properly fix this, we need to change how we check the permission, and that could be a huge work. To solve this quickly, adding a cache layer for the given request would be quite simple to do. We're already doing this in Commit#author, and this is extending that idea and make it generalized.
* | Introduce Gitlab::Cache::RequestStoreWrapLin Jen-Shin2017-07-041-2/+8
| | | | | | | | | | | | | | | | | | | | | | So that we cache the result of UserAccess#can_push_or_merge_to_branch? in RequestStore, avoiding querying ProtectedBranch over and over for the list of pipelines (i.e. in PipelineSerializer) I don't think this is ideal because I don't like the idea of RequestStore in general, but this is the easiest way to cache it without changing the architecture. In the future we should cache more explicitly rather than this kind of global store.
* | Consistently check permission for creating pipelines,Lin Jen-Shin2017-07-041-0/+4
|/ | | | | updating builds and updating pipelines. We check against being able to merge or push if the ref is protected.
* Add confirm delete protected branch modalSam Rose2017-05-081-0/+10
|
* Prevent people from creating branches if they don't have persmission to pushPawel Chojnacki2017-04-281-3/+1
|
* Fixed UserAccess#can_create_tag? after create_access_levels renameJames Edwards-Jones2017-04-041-1/+1
|
* Cleanup & tests for UserAccess#can_create_tag?James Edwards-Jones2017-04-041-7/+4
|
* Moved Project#protected_branch? to ProtectedBranch, similar for tagsJames Edwards-Jones2017-04-031-3/+3
|
* Extract ProtectedRef ConcernJames Edwards-Jones2017-04-031-8/+3
|
* Protected Tags enforced over gitJames Edwards-Jones2017-03-311-0/+16
|
* reverse the logic and use a clearer namehttp://jneen.net/2017-03-091-7/+7
|
* protect git access through the policy infrahttp://jneen.net/2017-03-091-1/+1
|
* Allow creating protected branch when it doesn't existPawel Chojnacki2017-01-131-1/+3
| | | | | | if user has either push or merge permissions + Change log entry for fix to creating a branch matching a wildcard fails
* Introduce no_user_or_blocked? and fix tests due toLin Jen-Shin2016-11-161-4/+12
| | | | checking user permission.
* Improve EE compatibility with protected branch access levels.Timothy Andrew2016-08-161-2/+2
| | | | | | | | | 1. Change a few incorrect `access_level` to `access_levels.first` that were missed in e805a64. 2. `API::Entities` can iterate over all access levels instead of just the first one. This makes no difference to CE, and makes it more compatible with EE.
* changes default_branch_protection to allow devs_can_merge protection option ↵tiagonbotelho2016-08-041-0/+2
| | | | aswell
* Enforce "No One Can Push" during git operations.Timothy Andrew2016-07-291-4/+6
| | | | | | | | | | | 1. The crux of this change is in `UserAccess`, which looks through all the access levels, asking each if the user has access to push/merge for the current project. 2. Update the `protected_branches` factory to create access levels as necessary. 3. Fix and augment `user_access` and `git_access` specs.
* Revert "Revert "Merge branch '18193-developers-can-merge' into 'master' ""Rémy Coutable2016-07-181-3/+45
| | | | | | | | This reverts commit 530f5158e297f3cde27f3566cfe13bad74ba3b50. See !4892. Signed-off-by: Rémy Coutable <remy@rymai.me>
* Revert "Merge branch '18193-developers-can-merge' into 'master' "Robert Speicher2016-07-131-45/+3
| | | | | This reverts commit 9ca633eb4c62231e4ddff5466c723cf8e2bdb25d, reversing changes made to fb229bbf7970ba908962b837b270adf56f14098f.
* Refactor `Gitlab::GitAccess`Timothy Andrew2016-07-131-3/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Don't use case statements for dispatch anymore. This leads to a lot of duplication, and makes the logic harder to follow. 2. Remove duplicated logic. - For example, the `can_push_to_branch?` exists, but we also have a different way of checking the same condition within `change_access_check`. - This kind of duplication is removed, and the `can_push_to_branch?` method is used in both places. 3. Move checks returning true/false to `UserAccess`. - All public methods in `GitAccess` now return an instance of `GitAccessStatus`. Previously, some methods would return true/false as well, which was confusing. - It makes sense for these kinds of checks to be at the level of a user, so the `UserAccess` class was repurposed for this. The prior `UserAccess.allowed?` classmethod is converted into an instance method. - All external uses of these checks have been migrated to use the `UserAccess` class 4. Move the "change_access_check" into a separate class. - Create the `GitAccess::ChangeAccessCheck` class to run these checks, which are quite substantial. - `ChangeAccessCheck` returns an instance of `GitAccessStatus` as well. 5. Break out the boolean logic in `ChangeAccessCheck` into `if/else` chains - this seems more readable. 6. I can understand that this might look like overkill for !4892, but I think this is a good opportunity to clean it up. - http://martinfowler.com/bliki/OpportunisticRefactoring.html
* Move method to UserJacob Vosmaer2016-03-101-3/+2
|
* Acquire lock before LDAP syncJacob Vosmaer2016-03-091-2/+3
|
* Cache LDAP check in Gitlab::UserAccessJacob Vosmaer2014-08-061-7/+2
| | | | | This changes the number of LDAP calls when users access GitLab via Git-over-SSH or the API. LDAP check results are cached for 1 hour.
* Move user access check to Gitlab::UserAccessJacob Vosmaer2014-05-151-0/+18