Skip to content

Commit dd66f74

Browse files
committed
First attempt to refactor authorization layer
1 parent 348d254 commit dd66f74

File tree

7 files changed

+40
-53
lines changed

7 files changed

+40
-53
lines changed

app/controllers/users_controller.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ def scoped_users
1818
# GET /organizations/:id/members
1919
#
2020
def index
21+
authorize @organization, :show?
22+
2123
@users = scoped_users
2224
@memberships = @organization.members.
2325
where(user_id: @users.map(&:id)).
@@ -29,6 +31,8 @@ def index
2931
# GET /members/:user_id
3032
#
3133
def show
34+
authorize @organization, :show?
35+
3236
@user = find_user
3337
authorize @user
3438

@@ -38,17 +42,21 @@ def show
3842
end
3943

4044
def new
41-
authorize User
45+
authorize @organization, :admin?
46+
4247
@user = scoped_users.build
4348
end
4449

4550
def edit
46-
@user = find_user
51+
@user = User.find_by_id(params[:id])
52+
53+
# TODO: raise 404
54+
raise unless @user
55+
56+
authorize @user
4757
end
4858

4959
def create
50-
authorize User
51-
5260
# New User
5361
email = user_params[:email]
5462
@user = User.find_or_initialize_by(email: email) do |u|

app/policies/application_policy.rb

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
class ApplicationPolicy
2-
attr_reader :member, :user, :organization, :record
2+
attr_reader :user, :record
33

4-
def initialize(member, record)
5-
@member = member
6-
@user = member.user if member
7-
@organization = member.organization if member
4+
def initialize(user, record)
5+
@user = user
86
@record = record
97
end
108

@@ -13,7 +11,7 @@ def index?
1311
end
1412

1513
def show?
16-
scope.where(id: record.id).exists?
14+
false
1715
end
1816

1917
def create?
@@ -35,23 +33,4 @@ def edit?
3533
def destroy?
3634
false
3735
end
38-
39-
def scope
40-
Pundit.policy_scope!(member, record.class)
41-
end
42-
43-
class Scope
44-
attr_reader :member, :user, :organization, :scope
45-
46-
def initialize(member, scope)
47-
@member = member
48-
@user = member.user if member
49-
@organization = member.organization if member
50-
@scope = scope
51-
end
52-
53-
def resolve
54-
scope
55-
end
56-
end
5736
end

app/policies/organization_policy.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class OrganizationPolicy < ApplicationPolicy
2+
def show?
3+
user.member(record).present?
4+
end
5+
6+
def admin?
7+
user.admins?(record)
8+
end
9+
end

app/policies/user_policy.rb

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
class UserPolicy < ApplicationPolicy
2+
def show?
3+
true
4+
end
5+
26
def new?
37
user.admins?(organization)
48
end
@@ -14,19 +18,4 @@ def update?
1418
user.admins?(organization)
1519
)
1620
end
17-
18-
class Scope < ApplicationPolicy::Scope
19-
attr_reader :member, :user, :organization, :scope
20-
21-
def initialize(user, scope)
22-
@member = member
23-
@user = member.user if member
24-
@organization = member.organization if member
25-
@scope = scope
26-
end
27-
28-
def resolve
29-
scope
30-
end
31-
end
3221
end

app/views/organizations/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<td><%= link_to org.name, org %></td>
2828
<td><%= org.users.count %></td>
2929
<td class="hover-actions">
30-
<% if current_user.admins?(org) %>
30+
<% if current_user && current_user.admins?(org) %>
3131
<%= link_to edit_organization_path(org), class: 'action' do %>
3232
<%= glyph :pencil %>
3333
<%= t 'global.edit' %>

app/views/organizations/show.html.erb

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,18 @@
109109
<% end %>
110110
</li>
111111
<% end %>
112-
<li>
113-
<%= link_to give_time_organization_path(@organization) do %>
114-
<%= glyph :time %>
115-
<%= t "global.give_time" %>
116-
<% end %>
117-
</li>
112+
<% if current_user && current_user.member(@organization) %>
113+
<li>
114+
<%= link_to give_time_organization_path(@organization) do %>
115+
<%= glyph :time %>
116+
<%= t "global.give_time" %>
117+
<% end %>
118+
</li>
119+
<% end %>
118120
</ul>
119121
</div>
120122
</div>
121123

122-
<% if current_user %>
124+
<% if current_user && current_user.member(@organization) %>
123125
<%= render "shared/movements" %>
124126
<% end %>

app/views/users/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="panel-body">
33
<h1>
44
<small>
5-
<% unless @member.active %>
5+
<% unless @member.active %>
66
<%= t ".inactive" %>
77
<% end %>
88
</small>

0 commit comments

Comments
 (0)