1. 17 7月, 2017 1 次提交
    • L
      Add RequestStoreWrap to cache via RequestStore · 143fc48a
      Lin Jen-Shin 提交于
      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.
      143fc48a
  2. 08 5月, 2017 1 次提交
  3. 28 4月, 2017 1 次提交
  4. 04 4月, 2017 4 次提交
  5. 01 4月, 2017 1 次提交
  6. 10 3月, 2017 2 次提交
  7. 13 1月, 2017 1 次提交
  8. 16 11月, 2016 1 次提交
  9. 16 8月, 2016 1 次提交
  10. 05 8月, 2016 1 次提交
  11. 29 7月, 2016 1 次提交
    • T
      Enforce "No One Can Push" during git operations. · 828f6eb6
      Timothy Andrew 提交于
      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.
      828f6eb6
  12. 18 7月, 2016 1 次提交
  13. 14 7月, 2016 1 次提交
  14. 13 7月, 2016 1 次提交
    • T
      Refactor `Gitlab::GitAccess` · 60245bbe
      Timothy Andrew 提交于
      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
      60245bbe
  15. 10 3月, 2016 2 次提交
  16. 07 8月, 2014 1 次提交
  17. 15 5月, 2014 1 次提交