Skip to content

Commit 3373589

Browse files
committed
Add privacy to Activity and only show public activity to logged-in users by default
1 parent 000bb4e commit 3373589

File tree

10 files changed

+64
-18
lines changed

10 files changed

+64
-18
lines changed

app/controllers/better_together/hub_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module BetterTogether
44
# Internal hub for logged-in users to see relevant platform & community information
55
class HubController < ApplicationController
66
def index
7-
authorize :'better_together/hub', :index?
7+
authorize PublicActivity::Activity
88
@activities = helpers.activities
99
end
1010
end

app/helpers/better_together/hub_helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ def whose?(user, object) # rubocop:todo Metrics/MethodLength, Naming/PredicateMe
4040
def link_to_trackable(object, object_type)
4141
if object
4242
object_url = object.respond_to?(:url) ? object.url : object
43-
trackable_name = "#{object.class.model_name.human}: #{object}"
44-
link_to trackable_name, object_url
43+
trackable_name = "#{object.class.model_name.human}: "
44+
(trackable_name + link_to(object, object_url, class: 'text-decoration-none')).html_safe
4545
else
4646
"a #{object_type.downcase} which does not exist anymore"
4747
end

app/models/concerns/better_together/tracked_activity.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ module TrackedActivity
99
included do
1010
include PublicActivity::Model
1111

12-
tracked owner: proc { |controller, _model| controller&.helpers&.current_person }
12+
tracked owner: proc { |controller, _model| controller&.helpers&.current_person },
13+
privacy: proc { |_controller, _model| _model.privacy if _model.respond_to?(:privacy) }
14+
15+
has_many :activities, as: :trackable, class_name: 'PublicActivity::Activity', dependent: :destroy
1316
end
1417

1518
def self.included_in_models

app/policies/better_together/activity_policy.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module BetterTogether
44
# Access control fro PublicActivity::Activity records
55
class ActivityPolicy < ApplicationPolicy
66
def index?
7-
permitted_to?('manage_platform')
7+
user.present?
88
end
99

1010
def show?
@@ -14,7 +14,15 @@ def show?
1414
# Filter and sort public activity results
1515
class Scope < ApplicationPolicy::Scope
1616
def resolve
17-
scope.order(updated_at: :desc)
17+
results = scope.order(updated_at: :desc)
18+
19+
query = table[:privacy].eq('public')
20+
21+
results.where(query)
22+
end
23+
24+
def table
25+
scope.arel_table
1826
end
1927
end
2028
end

app/views/better_together/hub/index.html.erb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<div class="col-md-6">
1111
<div class="card mb-4">
1212
<div class="card-header">
13-
<h5><%= t('.your_activity', default: 'Your Activity') %></h5>
13+
<h5><%= t('.activity', default: 'Activity') %></h5>
1414
</div>
1515
<div class="card-body">
1616
<%= render_activities(@activities, :layout => "layouts/better_together/activity_wrapper") %>
@@ -19,7 +19,7 @@
1919
</div>
2020

2121
<!-- Platform-wide section -->
22-
<div class="col-md-6">
22+
<!-- <div class="col-md-6">
2323
<div class="card mb-4">
2424
<div class="card-header">
2525
<h5><%= t('.platform_updates', default: 'Platform Updates') %></h5>
@@ -32,11 +32,10 @@
3232
</ul>
3333
</div>
3434
</div>
35-
</div>
35+
</div> -->
3636
</div>
3737

38-
<div class="row">
39-
<!-- Additional sections -->
38+
<!-- <div class="row">
4039
<div class="col-md-6">
4140
<div class="card mb-4">
4241
<div class="card-header">
@@ -58,5 +57,5 @@
5857
</div>
5958
</div>
6059
</div>
61-
</div>
60+
</div> -->
6261
</div>

app/views/layouts/better_together/_activity_wrapper.html.erb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,16 @@
1010
<% if a.owner %>
1111
<div class="me-3">
1212
</div>
13-
<%= link_to(a.owner, class: "fw-bold text-decoration-none") do %>
14-
<%= profile_image_tag(a.owner, class: 'rounded-circle border activity', style: "height: 30px; width: 30px;") %>
15-
<%= a.owner %>
13+
<% if policy(a.owner).show? %>
14+
<%= link_to(a.owner, class: "fw-bold text-decoration-none") do %>
15+
<%= profile_image_tag(a.owner, class: 'rounded-circle border activity', style: "height: 30px; width: 30px;") %>
16+
<%= a.owner %>
17+
<% end %>
18+
<% else %>
19+
<span class="fw-bold">
20+
<%= profile_image_tag(a.owner, class: 'rounded-circle border activity', style: "height: 30px; width: 30px;") %>
21+
<%= a.owner %>
22+
</span>
1623
<% end %>
1724
<% else %>
1825
<span class="fw-bold">someone</span>

config/initializers/public_activity.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,17 @@
22

33
# config/initializers/public_activity.rb
44

5-
PublicActivity::Activity.table_name = :better_together_activities
5+
# require 'better_togehter/privacy'
6+
7+
ActiveSupport::Reloader.to_prepare do
8+
PublicActivity::Config.set do
9+
table_name 'better_together_activities'
10+
end
11+
12+
# PublicActivity::Activity.include BetterTogether::Privacy
13+
PublicActivity::Activity.class_eval do
14+
def self.policy_class
15+
BetterTogether::ActivityPolicy
16+
end
17+
end
18+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
class AddDefaultActivityParameters < ActiveRecord::Migration[7.1]
4+
def change
5+
change_column_default :better_together_activities, :parameters, from: nil, to: '{}'
6+
end
7+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
class AddPrivacyToActivities < ActiveRecord::Migration[7.1]
4+
def change
5+
change_table :better_together_activities, &:bt_privacy
6+
end
7+
end

spec/dummy/db/schema.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[7.1].define(version: 2025_06_07_130736) do
13+
ActiveRecord::Schema[7.1].define(version: 2025_07_03_215419) do
1414
# These are extensions that must be enabled in order to support this database
1515
enable_extension "pgcrypto"
1616
enable_extension "plpgsql"
@@ -64,10 +64,12 @@
6464
t.string "owner_type"
6565
t.uuid "owner_id"
6666
t.string "key"
67-
t.text "parameters"
67+
t.jsonb "parameters", default: "{}"
6868
t.string "recipient_type"
6969
t.uuid "recipient_id"
70+
t.string "privacy", limit: 50, default: "private", null: false
7071
t.index ["owner_type", "owner_id"], name: "bt_activities_by_owner"
72+
t.index ["privacy"], name: "by_better_together_activities_privacy"
7173
t.index ["recipient_type", "recipient_id"], name: "bt_activities_by_recipient"
7274
t.index ["trackable_type", "trackable_id"], name: "bt_activities_by_trackable"
7375
end

0 commit comments

Comments
 (0)