diff --git a/app/controllers/v1/activities_controller.rb b/app/controllers/v1/activities_controller.rb index 4df2c71f59a9a945317d8f01300d1be452312c41..4d2b7cca1fd972fdc403d1b7a17d8bf017106784 100644 --- a/app/controllers/v1/activities_controller.rb +++ b/app/controllers/v1/activities_controller.rb @@ -8,7 +8,7 @@ class V1::ActivitiesController < ApplicationController # Render all activities that logged user can see def index authorize :activity, :index? - activities = paginate current_user.activities + activities = paginate ::ActivityPolicy::Scope.new(current_user, ::PublicActivity::Activity).resolve render json: activities end @@ -21,4 +21,10 @@ class V1::ActivitiesController < ApplicationController activities = paginate resource_model.activities render json: activities end + + def me + authorize :activity, :index? + activities = paginate current_user.activities + render json: activities + end end diff --git a/app/models/concerns/trackable.rb b/app/models/concerns/trackable.rb index 3c7289986ac6cfcfc776cb183b86bd716db07771..f3ee59309230bf71a785b12a15410acff3058363 100644 --- a/app/models/concerns/trackable.rb +++ b/app/models/concerns/trackable.rb @@ -5,5 +5,6 @@ module Trackable included do tracked owner: proc { |controller, model| model.try(:user) || model.try(:owner) || controller.try(:current_user) } tracked recipient: proc { |_controller, model| model.try(:recipient) || model } + tracked privacy: proc { |_controller, model| model.try(:privacy) || "public" } end end diff --git a/app/models/user.rb b/app/models/user.rb index c5c74d9aa8d7b9a7159c15db6ac6456fb335156f..471b39b82e5eeaba1fac6aa768fa90dfa3bf794b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,6 +40,10 @@ class User < ApplicationRecord include Tagger include Complainable include Publisher + include PublicActivity::Common + + after_create -> { new_activity("create") } + after_update -> { new_activity("update") } # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable @@ -193,4 +197,14 @@ class User < ApplicationRecord password: Devise.friendly_token[0, 20] ) end + + def new_activity(type) + should_create = true + if type == "update" + ignore = ["tokens", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "updated_at"] + filtered = changed.reject { |x| ignore.include?(x) } + should_create = !filtered.empty? + end + self.create_activity key: 'user.'+type, trackable: self, owner: self, recipient: self, privacy: "public" if should_create + end end diff --git a/app/policies/activity_policy.rb b/app/policies/activity_policy.rb index 4a047168e4dbf5763ad93eaa763cc9f06d7e4d0c..cf550a904aefffe22da19d376b9afa393f382511 100644 --- a/app/policies/activity_policy.rb +++ b/app/policies/activity_policy.rb @@ -8,12 +8,7 @@ class ActivityPolicy < ApplicationPolicy end def resolve - raise StandardError, 'The user must be set.' if user.blank? - if user.is_admin? - scope.includes(:owner).order('created_at DESC').all - else - user.activities - end + scope.includes(:owner,:recipient).where("privacy = 'public'").order('created_at DESC').all end end diff --git a/app/serializers/public_activity/activity_serializer.rb b/app/serializers/public_activity/activity_serializer.rb index c7fd51fdcf5855c55209df4f610ec4d4b5a1ed79..107b5298364d7795bd6a8d42f4f6e3d7a3012edf 100644 --- a/app/serializers/public_activity/activity_serializer.rb +++ b/app/serializers/public_activity/activity_serializer.rb @@ -8,8 +8,8 @@ class PublicActivity::ActivitySerializer < ActiveModel::Serializer end cache key: 'activity', expires_in: 24.hours - attributes :id, :trackable_type, :activity, :recipient_type, :parameters, :created_at - + attributes :id, :trackable_type, :activity, :privacy, :recipient_type, :parameters, :created_at + has_one :owner has_one :recipient has_one :trackable diff --git a/config/routes.rb b/config/routes.rb index b1c6258d0d68d0208b4853f23c6c4dccda89bd5d..0472a038b0880749716e765d85726f54ade7c6c6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -126,6 +126,6 @@ Rails.application.routes.draw do post '/package', to: 'packages#link' get '/subjects', to: 'subjects#index' get '/educational_stages', to: 'educational_stages#index' - + get '/activities/me', to: 'activities#me' end end diff --git a/db/migrate/20161123114102_add_privacy_to_activities.rb b/db/migrate/20161123114102_add_privacy_to_activities.rb new file mode 100644 index 0000000000000000000000000000000000000000..fc2f91a7c076ca359f84fe532d15ec1e70fd862c --- /dev/null +++ b/db/migrate/20161123114102_add_privacy_to_activities.rb @@ -0,0 +1,6 @@ +class AddPrivacyToActivities < ActiveRecord::Migration[5.0] + def change + add_column :activities, :privacy, :string + add_index :activities, :privacy + end +end