Skip to content

Commit 02e9eda

Browse files
lodewigesCopilot
andauthored
Move Permited Atributes to Policy (#1200)
* Intial commit * implement suggestions * fix lint * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix permitted attributes for order update --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 5ad8626 commit 02e9eda

17 files changed

Lines changed: 105 additions & 36 deletions

app/controllers/activities_controller.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def show # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
4545
end
4646

4747
def create
48-
@activity = Activity.new(permitted_attributes.merge(created_by: current_user))
48+
@activity = Activity.new(activity_params.merge(created_by: current_user))
4949
authorize @activity
5050

5151
if @activity.save
@@ -61,7 +61,7 @@ def update
6161
@activity = Activity.find(params[:id])
6262
authorize @activity
6363

64-
if @activity.update(params.require(:activity).permit(%i[title]))
64+
if @activity.update(activity_params_for_update)
6565
flash[:success] = 'Activiteit hernoemd'
6666
else
6767
flash[:error] = "Activiteit hernoemen mislukt; #{@activity.errors.full_messages.join(', ')}"
@@ -177,7 +177,11 @@ def sorted_product_price(activity)
177177
activity.price_list.product_price.sort_by { |p| p.product.id }
178178
end
179179

180-
def permitted_attributes
181-
params.require(:activity).permit(%i[title start_time end_time price_list_id])
180+
def activity_params
181+
params.require(:activity).permit(policy(Activity.new).permitted_attributes)
182+
end
183+
184+
def activity_params_for_update
185+
params.require(:activity).permit(policy(@activity).permitted_attributes_for_update)
182186
end
183187
end

app/controllers/credit_mutations_controller.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def index
1414
end
1515

1616
def create # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
17-
@mutation = CreditMutation.new(permitted_attributes.merge(created_by: current_user))
17+
@mutation = CreditMutation.new(credit_mutation_params.merge(created_by: current_user))
1818
authorize @mutation
1919

2020
respond_to do |format|
@@ -40,7 +40,7 @@ def model_includes
4040
%i[user activity created_by]
4141
end
4242

43-
def permitted_attributes
44-
params.require(:credit_mutation).permit(%i[description amount user_id activity_id])
43+
def credit_mutation_params
44+
params.require(:credit_mutation).permit(policy(CreditMutation).permitted_attributes)
4545
end
4646
end

app/controllers/invoices_controller.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def show
3131
end
3232

3333
def create
34-
attributes = remove_empty(permitted_attributes.to_h)
34+
attributes = remove_empty(invoice_params.to_h)
3535
@invoice = Invoice.new(attributes)
3636
authorize @invoice
3737

@@ -93,8 +93,8 @@ def invoice
9393
@invoice = Invoice.find_by!(token: params[:id])
9494
end
9595

96-
def permitted_attributes
97-
params.require(:invoice).permit(%i[user_id activity_id name_override email_override rows], rows_attributes: %i[name amount price])
96+
def invoice_params
97+
params.require(:invoice).permit(policy(Invoice.new).permitted_attributes)
9898
end
9999

100100
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength

app/controllers/orders_controller.rb

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def index
1616
end
1717

1818
def create # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
19-
@order = Order.new(permitted_attributes.merge(created_by: current_user))
19+
@order = Order.new(order_params.merge(created_by: current_user))
2020
authorize @order
2121

2222
current_credit = @order.user&.credit
@@ -43,7 +43,7 @@ def update
4343

4444
authorize @order
4545

46-
if @order.update(permitted_attributes_on_update)
46+
if @order.update(order_params_for_update)
4747
render json: @order.to_json(proper_json)
4848
else
4949
render json: @order.errors, status: :unprocessable_content
@@ -83,13 +83,12 @@ def send_insufficient_credit_mail?(user, old_credit)
8383
user.provider.in?(%w[amber_oauth2 sofia_account]) && user.credit.negative? && old_credit.positive?
8484
end
8585

86-
def permitted_attributes
87-
params.require(:order).permit(%i[user_id paid_with_cash paid_with_pin activity_id],
88-
order_rows_attributes: %i[id product_id product_count])
86+
def order_params
87+
params.require(:order).permit(policy(Order.new).permitted_attributes_for_create)
8988
end
9089

91-
def permitted_attributes_on_update
92-
params.require(:order).permit(:id, order_rows_attributes: %i[id product_count])
90+
def order_params_for_update
91+
params.require(:order).permit(policy(@order).permitted_attributes_for_update)
9392
end
9493

9594
def proper_json

app/controllers/price_lists_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def index
2121
end
2222

2323
def create
24-
@price_list = PriceList.new(permitted_attributes)
24+
@price_list = PriceList.new(price_list_params)
2525
authorize @price_list
2626

2727
if @price_list.save
@@ -36,7 +36,7 @@ def update
3636
@price_list = PriceList.find(params[:id])
3737
authorize @price_list
3838

39-
if @price_list.update(permitted_attributes)
39+
if @price_list.update(price_list_params)
4040
flash[:success] = 'Prijslijst opgeslagen'
4141
else
4242
flash[:error] = "Prijslijst wijzigen mislukt; #{@price_list.errors.full_messages.join(', ')}"
@@ -76,7 +76,7 @@ def unarchive
7676

7777
private
7878

79-
def permitted_attributes
80-
params.require(:price_list).permit(:name)
79+
def price_list_params
80+
params.require(:price_list).permit(policy(PriceList.new).permitted_attributes)
8181
end
8282
end

app/controllers/products_controller.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class ProductsController < ApplicationController
55
after_action :verify_authorized
66

77
def create
8-
@product = Product.new(permitted_attributes)
8+
@product = Product.new(product_params)
99
authorize @product
1010

1111
if @product.save
@@ -18,7 +18,7 @@ def create
1818
def update
1919
authorize @product
2020

21-
if @product.update(permitted_attributes)
21+
if @product.update(product_params)
2222
render json: @product, include: json_includes, except: json_exludes, methods: :t_category
2323
else
2424
render json: @product.errors, status: :unprocessable_content
@@ -31,10 +31,8 @@ def set_model
3131
@product = Product.find(params[:id])
3232
end
3333

34-
def permitted_attributes
35-
params.require(:product)
36-
.permit(%i[name category color requires_age id],
37-
product_prices_attributes: %i[id product_id price_list_id price _destroy])
34+
def product_params
35+
params.require(:product).permit(policy(Product.new).permitted_attributes)
3836
end
3937

4038
def json_includes

app/controllers/sofia_accounts_controller.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def create # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
1515
user = User.find_by(id: user_id)
1616
validate_user(user)
1717

18-
sofia_account = SofiaAccount.new(permitted_attributes.merge(user_id:))
18+
sofia_account = SofiaAccount.new(sofia_account_params.merge(user_id:))
1919
raise normalize_error_messages(sofia_account.errors.full_messages) unless sofia_account.save
2020

2121
update_user_after_creation(user, sofia_account)
@@ -256,7 +256,7 @@ def update_user_after_creation(user, sofia_account) # rubocop:disable Metrics/Ab
256256
raise normalize_error_messages(user.errors.full_messages)
257257
end
258258

259-
def permitted_attributes
260-
params.require(:sofia_account).permit(%i[username password password_confirmation])
259+
def sofia_account_params
260+
params.require(:sofia_account).permit(policy(SofiaAccount.new).permitted_attributes)
261261
end
262262
end

app/controllers/users_controller.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def json
7272
end
7373

7474
def create
75-
@user = User.new(permitted_attributes)
75+
@user = User.new(user_params)
7676
authorize @user
7777

7878
if @user.save
@@ -88,7 +88,7 @@ def update
8888
@user = User.find(params[:id])
8989
authorize @user
9090

91-
if @user.update(params.require(:user).permit(%i[name email deactivated]))
91+
if update_user
9292
flash[:success] = 'Gebruiker geupdate'
9393
else
9494
flash[:error] = "Gebruiker updaten mislukt; #{@user.errors.full_messages.join(', ')}"
@@ -140,8 +140,7 @@ def update_with_sofia_account # rubocop:disable Metrics/AbcSize, Metrics/MethodL
140140
end
141141
authorize @sofia_account
142142

143-
if @user.update(params.require(:user).permit(%i[email sub_provider] + (current_user.treasurer? ? %i[name deactivated] : []),
144-
sofia_account_attributes: %i[id username]))
143+
if @user.update(params.require(:user).permit(policy(@user).permitted_attributes_for_update_with_sofia_account))
145144
flash[:success] = 'Gegevens gewijzigd'
146145
else
147146
flash[:error] = "Gegevens wijzigen mislukt; #{@user.errors.full_messages.join(', ')}"
@@ -152,6 +151,11 @@ def update_with_sofia_account # rubocop:disable Metrics/AbcSize, Metrics/MethodL
152151

153152
private
154153

154+
def update_user
155+
permitted_params = params.require(:user).permit(policy(@user).permitted_attributes_for_update)
156+
@user.update(permitted_params)
157+
end
158+
155159
def find_or_create_user(user_json) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
156160
fields = user_json['attributes']
157161
u = User.find_or_initialize_by(uid: user_json['id'])
@@ -166,7 +170,7 @@ def find_or_create_user(user_json) # rubocop:disable Metrics/AbcSize, Metrics/Me
166170
u.save
167171
end
168172

169-
def permitted_attributes
170-
params.require(:user).permit(%w[name email provider sub_provider])
173+
def user_params
174+
params.require(:user).permit(policy(User.new).permitted_attributes)
171175
end
172176
end

app/policies/activity_policy.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,12 @@ def orders?
4848
def credit_mutations?
4949
user&.treasurer?
5050
end
51+
52+
def permitted_attributes
53+
%i[title start_time end_time price_list_id]
54+
end
55+
56+
def permitted_attributes_for_update
57+
%i[title]
58+
end
5159
end

app/policies/application_policy.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def scope
3838
Pundit.policy_scope!(user, record.class)
3939
end
4040

41+
def permitted_attributes
42+
[]
43+
end
44+
4145
class Scope
4246
attr_reader :user, :scope
4347

0 commit comments

Comments
 (0)