opf/openproject

View on GitHub
modules/team_planner/app/contracts/team_planner/views/contract_strategy.rb

Summary

Maintainability
A
40 mins
Test Coverage
module ::TeamPlanner
  module Views
    class ContractStrategy < ::BaseContract
      validate :manageable

      private

      def manageable
        return if model.query.blank?

        errors.add(:base, :error_unauthorized) unless query_permissions?
      end

      def query_permissions?
        # TODO: This currently does not differentiate between public and private queries since it isn't specified yet.
        user_allowed_on_query?(:manage_team_planner)
      end

      def user_allowed_on_query?(permission)
        if model.query.project
          user.allowed_in_project?(permission, model.query.project)
        else
          user.allowed_in_any_project?(permission)
        end
      end
    end
  end
end