142 lines
5.5 KiB
Diff
142 lines
5.5 KiB
Diff
|
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
|
||
|
index 1fcadbfefbaf4d015d68ab7bc349f67becb717df..9d6a9449fcdcfbd138c7f8d4feb1e6b0e5a11926 100644
|
||
|
--- a/app/controllers/dashboard_controller.rb
|
||
|
+++ b/app/controllers/dashboard_controller.rb
|
||
|
@@ -14,6 +14,8 @@ class DashboardController < ApplicationController
|
||
|
@projects.personal(current_user)
|
||
|
when 'joined' then
|
||
|
@projects.joined(current_user)
|
||
|
+ when 'public' then
|
||
|
+ @projects.public_only
|
||
|
else
|
||
|
@projects
|
||
|
end
|
||
|
diff --git a/app/models/ability.rb b/app/models/ability.rb
|
||
|
index 2d80c6720b79da74ae9e4d20d816b2433f3082a8..946ec1e1128da3f55ac9b7198b6c0fbdc1d4aba7 100644
|
||
|
--- a/app/models/ability.rb
|
||
|
+++ b/app/models/ability.rb
|
||
|
@@ -27,6 +27,8 @@ class Ability
|
||
|
|
||
|
elsif project.guest_access_for?(user)
|
||
|
rules << project_guest_rules
|
||
|
+ elsif project.public?
|
||
|
+ rules << project_public_rules
|
||
|
end
|
||
|
|
||
|
if project.namespace
|
||
|
@@ -104,6 +106,10 @@ class Ability
|
||
|
]
|
||
|
end
|
||
|
|
||
|
+ def project_public_rules
|
||
|
+ project_report_rules
|
||
|
+ end
|
||
|
+
|
||
|
def group_abilities user, group
|
||
|
rules = []
|
||
|
|
||
|
diff --git a/app/models/project.rb b/app/models/project.rb
|
||
|
index 3e5c912e0b47a22cc5489b9cbfb1dd53da5095e9..f10a6afde27ce4226677c0aa28aabd7497fb4a9d 100644
|
||
|
--- a/app/models/project.rb
|
||
|
+++ b/app/models/project.rb
|
||
|
@@ -30,7 +30,7 @@ class Project < ActiveRecord::Base
|
||
|
class TransferError < StandardError; end
|
||
|
|
||
|
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
|
||
|
- :wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
|
||
|
+ :wall_enabled, :merge_requests_enabled, :wiki_enabled, :private_flag, as: [:default, :admin]
|
||
|
|
||
|
attr_accessible :namespace_id, :owner_id, as: :admin
|
||
|
|
||
|
@@ -87,7 +87,7 @@ class Project < ActiveRecord::Base
|
||
|
class << self
|
||
|
def authorized_for user
|
||
|
projects = includes(:users_projects, :namespace)
|
||
|
- projects = projects.where("users_projects.user_id = :user_id or projects.owner_id = :user_id or namespaces.owner_id = :user_id", user_id: user.id)
|
||
|
+ projects = projects.where("users_projects.user_id = :user_id or projects.owner_id = :user_id or namespaces.owner_id = :user_id or projects.private_flag = false", user_id: user.id)
|
||
|
end
|
||
|
|
||
|
def active
|
||
|
diff --git a/app/roles/authority.rb b/app/roles/authority.rb
|
||
|
--- a/app/roles/authority.rb
|
||
|
+++ b/app/roles/authority.rb
|
||
|
@@ -20,2 +20,3 @@ module Authority
|
||
|
|
||
|
def repository_readers
|
||
|
+ return ['@all'] if public?
|
||
|
diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml
|
||
|
index 27c22872d501456bc4b7fd4bfd2a31c45b0a0a53..793f6a22ac3a96540c4f18e518d2197de51482bf 100644
|
||
|
--- a/app/views/admin/projects/_form.html.haml
|
||
|
+++ b/app/views/admin/projects/_form.html.haml
|
||
|
@@ -24,6 +24,10 @@
|
||
|
= f.label :default_branch, "Default Branch"
|
||
|
.input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;")
|
||
|
|
||
|
+ .clearfix
|
||
|
+ = f.label :private_flag, "Private"
|
||
|
+ .input= f.check_box :private_flag
|
||
|
+
|
||
|
%fieldset.adv_settings
|
||
|
%legend Features:
|
||
|
|
||
|
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
|
||
|
index 634b1836754a026cd26a32a30e4b0745629fc1e5..7bcedf6156e341ce7be48bee56cf1087ba63ccdb 100644
|
||
|
--- a/app/views/admin/projects/show.html.haml
|
||
|
+++ b/app/views/admin/projects/show.html.haml
|
||
|
@@ -102,6 +102,13 @@
|
||
|
%td
|
||
|
= check_box_tag :post_receive_file, 1, @project.has_post_receive_file?, disabled: true
|
||
|
|
||
|
+ %tr
|
||
|
+ %td
|
||
|
+ %b
|
||
|
+ Private:
|
||
|
+ %td
|
||
|
+ = check_box_tag :private_flag, 1, @project.private?, disabled: true
|
||
|
+
|
||
|
%br
|
||
|
%h5
|
||
|
Team
|
||
|
diff --git a/app/views/dashboard/_projects.html.haml b/app/views/dashboard/_projects.html.haml
|
||
|
index cffafb5445c2b476018974c500f3e924dd8ee9c7..058e13f1741a52aedf7632052f745bf52ee00bbe 100644
|
||
|
--- a/app/views/dashboard/_projects.html.haml
|
||
|
+++ b/app/views/dashboard/_projects.html.haml
|
||
|
@@ -15,6 +15,8 @@
|
||
|
= link_to "Personal", dashboard_path(scope: 'personal')
|
||
|
= nav_tab :scope, 'joined' do
|
||
|
= link_to "Joined", dashboard_path(scope: 'joined')
|
||
|
+ = nav_tab :scope, 'public' do
|
||
|
+ = link_to "Public", dashboard_path(scope: 'public')
|
||
|
|
||
|
%ul.well-list
|
||
|
- projects.each do |project|
|
||
|
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
|
||
|
index 7044d1f20be1183c446de80268903f3018b7646e..2073b78d0606b688ffda69209130a4fb9f6d513c 100644
|
||
|
--- a/app/views/projects/_form.html.haml
|
||
|
+++ b/app/views/projects/_form.html.haml
|
||
|
@@ -23,6 +23,11 @@
|
||
|
= f.label :default_branch, "Default Branch"
|
||
|
.input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;")
|
||
|
|
||
|
+ .control-group
|
||
|
+ = f.label :private_flag, "Private"
|
||
|
+ .controls
|
||
|
+ = f.check_box :private_flag
|
||
|
+
|
||
|
%fieldset.features
|
||
|
%legend Features:
|
||
|
|
||
|
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
|
||
|
index 83a769760987b719e10892723c78ae797bed01d0..31ce053a7657d3d834a99d33faa5c6ebdfa03fbe 100644
|
||
|
--- a/spec/models/project_spec.rb
|
||
|
+++ b/spec/models/project_spec.rb
|
||
|
@@ -42,7 +42,7 @@ describe Project do
|
||
|
describe "Mass assignment" do
|
||
|
it { should_not allow_mass_assignment_of(:namespace_id) }
|
||
|
it { should_not allow_mass_assignment_of(:owner_id) }
|
||
|
- it { should_not allow_mass_assignment_of(:private_flag) }
|
||
|
+ it { should allow_mass_assignment_of(:private_flag) }
|
||
|
end
|
||
|
|
||
|
describe "Validation" do
|