releaf-permissions 0.2.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +19 -21
- data/app/assets/stylesheets/{releaf/controllers → controllers}/releaf/permissions/sessions.scss +0 -0
- data/app/builders/releaf/permissions/page/header_builder.rb +35 -0
- data/app/builders/releaf/permissions/page/layout_builder.rb +17 -0
- data/app/builders/releaf/permissions/page/menu_builder.rb +18 -0
- data/app/builders/releaf/permissions/roles/form_builder.rb +10 -6
- data/app/builders/releaf/permissions/roles/table_builder.rb +2 -6
- data/app/controllers/releaf/permissions/profile_controller.rb +25 -46
- data/app/controllers/releaf/permissions/roles_controller.rb +3 -5
- data/app/controllers/releaf/permissions/sessions_controller.rb +17 -27
- data/app/controllers/releaf/permissions/users_controller.rb +11 -14
- data/app/models/releaf/permissions/role.rb +0 -25
- data/app/models/releaf/permissions/user.rb +3 -9
- data/lib/releaf-permissions.rb +23 -27
- data/lib/releaf/permissions/access_control.rb +37 -0
- data/lib/releaf/permissions/configuration.rb +26 -0
- data/lib/releaf/permissions/controller_support.rb +33 -0
- data/lib/releaf/permissions/default_controller_resolver.rb +22 -0
- data/lib/releaf/permissions/engine.rb +1 -18
- data/lib/releaf/permissions/layout.rb +5 -0
- data/lib/releaf/permissions/{profile_component.rb → profile.rb} +6 -2
- data/lib/releaf/permissions/{roles_component.rb → roles.rb} +2 -2
- data/lib/releaf/permissions/settings_manager.rb +22 -0
- data/lib/releaf/permissions/users.rb +11 -0
- data/spec/builders/releaf/permissions/page/header_builder_spec.rb +87 -0
- data/spec/builders/releaf/permissions/page/layout_builder_spec.rb +64 -0
- data/spec/builders/releaf/permissions/page/menu_builder_spec.rb +100 -0
- data/spec/builders/{profile → releaf/permissions/profile}/form_builder_spec.rb +0 -0
- data/spec/builders/releaf/permissions/roles/form_builder_spec.rb +56 -0
- data/spec/builders/releaf/permissions/roles/table_builder_spec.rb +41 -0
- data/spec/builders/{users → releaf/permissions/users}/form_builder_spec.rb +0 -0
- data/spec/builders/{users → releaf/permissions/users}/table_builder_spec.rb +0 -0
- data/spec/controllers/permissions/profile_controller_spec.rb +0 -27
- data/spec/controllers/permissions/users_controller_spec.rb +1 -1
- data/spec/features/roles_spec.rb +3 -3
- data/spec/features/users_spec.rb +2 -2
- data/spec/lib/access_control_spec.rb +35 -50
- data/spec/lib/releaf/permissions/configuration_spec.rb +38 -0
- data/spec/lib/releaf/permissions/controller_support_spec.rb +76 -0
- data/spec/lib/releaf/permissions/default_controller_resolver_spec.rb +49 -0
- data/spec/lib/releaf/permissions/layout_spec.rb +10 -0
- data/spec/lib/releaf/permissions/profile_spec.rb +11 -0
- data/spec/lib/releaf/permissions/roles_spec.rb +10 -0
- data/spec/lib/releaf/permissions/settings_manager_spec.rb +38 -0
- data/spec/lib/releaf/permissions/users_spec.rb +17 -0
- data/spec/models/permissions/role_spec.rb +0 -28
- data/spec/models/permissions/user_spec.rb +33 -3
- metadata +56 -32
- data/app/controllers/releaf/permissions/home_controller.rb +0 -32
- data/app/lib/releaf/permissions/access_control.rb +0 -36
- data/lib/releaf/permissions/builders_autoload.rb +0 -11
- data/lib/releaf/permissions/devise_component.rb +0 -8
- data/lib/releaf/permissions/users_component.rb +0 -7
- data/releaf-permissions.gemspec +0 -19
- data/spec/builders/roles/form_builder_spec.rb +0 -38
- data/spec/builders/roles/table_builder_spec.rb +0 -29
- data/spec/controllers/permissions/home_controller_spec.rb +0 -52
@@ -0,0 +1,37 @@
|
|
1
|
+
module Releaf::Permissions
|
2
|
+
class AccessControl
|
3
|
+
include Virtus.model(strict: true)
|
4
|
+
attribute :user, Object
|
5
|
+
|
6
|
+
def self.initialize_component
|
7
|
+
ActiveSupport.on_load :base_controller do
|
8
|
+
Releaf::ActionController.send(:include, Releaf::Permissions::ControllerSupport)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.draw_component_routes(router)
|
13
|
+
router.devise_for(Releaf.application.config.permissions.devise_for, path: "", controllers: { sessions: "releaf/permissions/sessions" })
|
14
|
+
end
|
15
|
+
|
16
|
+
def controller_permitted?(controller_name)
|
17
|
+
allowed_controllers.include?(controller_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def allowed_controllers
|
21
|
+
permanent_allowed_controllers + role_allowed_controllers
|
22
|
+
end
|
23
|
+
|
24
|
+
def role_allowed_controllers
|
25
|
+
user.role.permissions.map{|permission| controller_name_from_permission(permission.permission) }.compact
|
26
|
+
end
|
27
|
+
|
28
|
+
def controller_name_from_permission(permission)
|
29
|
+
match = permission.match(/^controller\.(.+)/)
|
30
|
+
match[1] if match
|
31
|
+
end
|
32
|
+
|
33
|
+
def permanent_allowed_controllers
|
34
|
+
Releaf.application.config.permissions.permanent_allowed_controllers
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Releaf::Permissions
|
2
|
+
class Configuration
|
3
|
+
include Virtus.model(strict: true)
|
4
|
+
attribute :devise_for, String
|
5
|
+
attribute :access_control, Object
|
6
|
+
attribute :permanent_allowed_controllers, Array
|
7
|
+
|
8
|
+
def devise_model_name
|
9
|
+
devise_for.tr("/", "_")
|
10
|
+
end
|
11
|
+
|
12
|
+
def devise_model_class
|
13
|
+
devise_for.classify.constantize
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configure_component
|
17
|
+
Releaf.application.config.add_configuration(
|
18
|
+
new(
|
19
|
+
devise_for: "releaf/permissions/user",
|
20
|
+
access_control: Releaf::Permissions::AccessControl,
|
21
|
+
permanent_allowed_controllers: ['releaf/root', 'releaf/errors']
|
22
|
+
)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Releaf::Permissions
|
2
|
+
module ControllerSupport
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
prepend_before_action :set_locale, :verify_controller_access!, :authenticate!
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_locale
|
10
|
+
I18n.locale = user.locale
|
11
|
+
end
|
12
|
+
|
13
|
+
def verify_controller_access!
|
14
|
+
unless Releaf.application.config.permissions.access_control.new(user: user).controller_permitted?(short_name)
|
15
|
+
raise Releaf::AccessDenied
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def user
|
20
|
+
send("current_#{Releaf.application.config.permissions.devise_model_name}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def authorized?
|
24
|
+
method_name = "#{Releaf.application.config.permissions.devise_model_name}_signed_in?"
|
25
|
+
send(method_name)
|
26
|
+
end
|
27
|
+
|
28
|
+
def authenticate!
|
29
|
+
method_name = "authenticate_#{Releaf.application.config.permissions.devise_model_name}!"
|
30
|
+
send(method_name)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Releaf::Permissions
|
2
|
+
class DefaultControllerResolver < Releaf::Root::DefaultControllerResolver
|
3
|
+
|
4
|
+
def self.configure_component
|
5
|
+
Releaf.application.config.root.default_controller_resolver = self
|
6
|
+
end
|
7
|
+
|
8
|
+
def controllers
|
9
|
+
# Note: This basically sorts allowed controllers in order specified by
|
10
|
+
# Releaf.application.config.available_controllers
|
11
|
+
([user.role.default_controller] + super).uniq & allowed_controllers
|
12
|
+
end
|
13
|
+
|
14
|
+
def allowed_controllers
|
15
|
+
Releaf.application.config.permissions.access_control.new(user: user).allowed_controllers
|
16
|
+
end
|
17
|
+
|
18
|
+
def user
|
19
|
+
current_controller.user
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,24 +1,7 @@
|
|
1
|
-
require 'devise'
|
2
|
-
|
3
1
|
module Releaf::Permissions
|
4
|
-
require 'releaf/permissions/devise_component'
|
5
|
-
require 'releaf/permissions/profile_component'
|
6
|
-
require 'releaf/permissions/roles_component'
|
7
|
-
require 'releaf/permissions/users_component'
|
8
|
-
require 'releaf/permissions/builders_autoload'
|
9
|
-
|
10
2
|
class Engine < ::Rails::Engine
|
11
3
|
initializer 'precompile', group: :all do |app|
|
12
|
-
app.config.assets.precompile += %w(
|
4
|
+
app.config.assets.precompile += %w(controllers/releaf/permissions/*)
|
13
5
|
end
|
14
6
|
end
|
15
|
-
|
16
|
-
def self.components
|
17
|
-
[
|
18
|
-
Releaf::Permissions::DeviseComponent,
|
19
|
-
Releaf::Permissions::RolesComponent,
|
20
|
-
Releaf::Permissions::UsersComponent,
|
21
|
-
Releaf::Permissions::ProfileComponent
|
22
|
-
]
|
23
|
-
end
|
24
7
|
end
|
@@ -1,9 +1,13 @@
|
|
1
|
-
module Releaf::Permissions::
|
1
|
+
module Releaf::Permissions::Profile
|
2
|
+
|
3
|
+
def self.configure_component
|
4
|
+
Releaf.application.config.additional_controllers = Releaf.application.config.additional_controllers + ['releaf/permissions/profile']
|
5
|
+
end
|
6
|
+
|
2
7
|
def self.draw_component_routes router
|
3
8
|
router.namespace :releaf, path: nil do
|
4
9
|
router.get "profile", to: "permissions/profile#edit", as: :permissions_user_profile
|
5
10
|
router.patch "profile", to: "permissions/profile#update"
|
6
|
-
router.post "profile/settings", to: "permissions/profile#settings", as: :permissions_user_profile_settings
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Releaf::Permissions
|
2
|
+
class SettingsManager
|
3
|
+
def self.configure_component
|
4
|
+
Releaf.application.config.settings_manager = self
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.read(controller:, key:)
|
8
|
+
controller.user.settings[key] if controller.respond_to? :user
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.write(controller:, key:, value:)
|
12
|
+
# Sometimes concurrency happens, so lets try until
|
13
|
+
# record get updated
|
14
|
+
begin
|
15
|
+
controller.user.settings[key] = value
|
16
|
+
rescue ActiveRecord::RecordNotUnique
|
17
|
+
retry
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Releaf::Permissions::Users
|
2
|
+
extend Releaf::Component
|
3
|
+
|
4
|
+
def self.configure_component
|
5
|
+
Releaf.application.config.permissions.devise_for = 'releaf/permissions/user'
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.draw_component_routes(router)
|
9
|
+
resource_route(router, :permissions, :users)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
describe Releaf::Permissions::Page::HeaderBuilder, type: :class do
|
4
|
+
class PageHeaderBuilderTestHelper < ActionView::Base
|
5
|
+
include Rails.application.routes.url_helpers
|
6
|
+
include FontAwesome::Rails::IconHelper
|
7
|
+
|
8
|
+
def protect_against_forgery?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def form_authenticity_token
|
13
|
+
"xxx"
|
14
|
+
end
|
15
|
+
|
16
|
+
def request_forgery_protection_token
|
17
|
+
"yyy"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
subject { described_class.new(template) }
|
22
|
+
let(:template){ PageHeaderBuilderTestHelper.new }
|
23
|
+
|
24
|
+
describe "#items" do
|
25
|
+
it "returns array of home link, profile block and logout form content" do
|
26
|
+
allow(subject).to receive(:home_link).and_return("a")
|
27
|
+
allow(subject).to receive(:profile_block).and_return("b")
|
28
|
+
allow(subject).to receive(:sign_out_form).and_return("c")
|
29
|
+
expect(subject.items).to eq(["a", "b", "c"])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#profile_path" do
|
34
|
+
it "returns profile edit url for defined profile controller" do
|
35
|
+
expect(subject.profile_path).to eq("/admin/profile")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#profile_block" do
|
40
|
+
it "returns profile block with content" do
|
41
|
+
allow(subject).to receive(:profile_user_name).and_return("neim")
|
42
|
+
allow(subject).to receive(:profile_path).and_return("url_b")
|
43
|
+
content = '<a class="button profile" href="url_b"><span class="name">neim</span></a>'
|
44
|
+
expect(subject.profile_block).to eq(content)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#user" do
|
49
|
+
it "returns permissions manager user" do
|
50
|
+
controller = Releaf::RootController.new
|
51
|
+
allow(subject).to receive(:controller).and_return(controller)
|
52
|
+
allow(controller).to receive(:user).and_return("x")
|
53
|
+
expect(subject.user).to eq("x")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#profile_user_name" do
|
58
|
+
it "returns title for user instance" do
|
59
|
+
user = Releaf::Permissions::User.new(name: "a", surname: "b")
|
60
|
+
allow(subject).to receive(:user).and_return(user)
|
61
|
+
allow(subject).to receive(:resource_title).with(user).and_return("x t")
|
62
|
+
expect(subject.profile_user_name).to eq("x t")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#sign_out_path" do
|
67
|
+
it "returns sign out url" do
|
68
|
+
expect(subject.sign_out_path).to eq("/admin/sign_out")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#sign_out_form" do
|
73
|
+
it "returns sign out form" do
|
74
|
+
allow(subject).to receive(:sign_out_path).and_return("url_a")
|
75
|
+
content = %Q[
|
76
|
+
<form class="sign-out" action="url_a" accept-charset="UTF-8" method="post">
|
77
|
+
<input name="utf8" type="hidden" value="✓" />
|
78
|
+
<input type="hidden" name="_method" value="delete" />
|
79
|
+
<input type="hidden" name="yyy" value="xxx" />
|
80
|
+
<button class="button only-icon" type="submit" title="Sign out">
|
81
|
+
<i class="fa fa-power-off fa-icon-header"></i>
|
82
|
+
</button>
|
83
|
+
</form>]
|
84
|
+
expect(subject.sign_out_form).to match_html( content )
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
describe Releaf::Permissions::Page::LayoutBuilder, type: :class do
|
4
|
+
class PermissionsLayoutBuilderView < ActionView::Base; end
|
5
|
+
let(:controller){ Releaf::RootController.new }
|
6
|
+
let(:template){ PermissionsLayoutBuilderView.new }
|
7
|
+
subject { described_class.new(template) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(subject).to receive(:controller).and_return(controller)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "inherits Releaf::Builders::Page::LayoutBuilder" do
|
14
|
+
expect(described_class.superclass).to eq(Releaf::Builders::Page::LayoutBuilder)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#header_builder" do
|
18
|
+
it "returns `Releaf::Permissions::Page::HeaderBuilder` class" do
|
19
|
+
expect(subject.header_builder).to eq(Releaf::Permissions::Page::HeaderBuilder)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#menu_builder" do
|
24
|
+
it "returns `Releaf::Permissions::Page::MenuBuilder` class" do
|
25
|
+
expect(subject.menu_builder).to eq(Releaf::Permissions::Page::MenuBuilder)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#body_content" do
|
30
|
+
before do
|
31
|
+
allow(subject).to receive(:header).and_return("_header")
|
32
|
+
allow(subject).to receive(:menu).and_return("_menu")
|
33
|
+
allow(subject).to receive(:notifications).and_return("_notifications")
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when controller responds to `authorized?` and `authorized?` call return true" do
|
37
|
+
it "returns `super` content" do
|
38
|
+
allow(controller).to receive(:authorized?).and_return(true)
|
39
|
+
expect(subject.body_content{ "x" }).to eq("_header_menu<main id=\"main\">x</main>_notifications")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when controller responds to `authorized?` and `authorized?` call return false" do
|
44
|
+
it "returns given block content" do
|
45
|
+
allow(controller).to receive(:authorized?).and_return(false)
|
46
|
+
expect(subject.body_content{ "x" }).to eq("x")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when controller does not responds to `authorized?`" do
|
51
|
+
it "returns given block content" do
|
52
|
+
allow(controller).to receive(:respond_to?).with(:authorized?).and_return(false)
|
53
|
+
expect(subject.body_content{ "x" }).to eq("x")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
#def body_content(&block)
|
58
|
+
#if controller.respond_to?(:authorized?) && controller.authorized?
|
59
|
+
#super
|
60
|
+
#else
|
61
|
+
#yield
|
62
|
+
#end
|
63
|
+
#end
|
64
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
describe Releaf::Permissions::Page::MenuBuilder, type: :class do
|
4
|
+
class MenuBuilderTestHelper < ActionView::Base
|
5
|
+
include FontAwesome::Rails::IconHelper
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:controller){ Releaf::ActionController.new }
|
9
|
+
let(:template){ MenuBuilderTestHelper.new }
|
10
|
+
let(:group_item){ Releaf::ControllerGroupDefinition.new(name: "x", items: []) }
|
11
|
+
let(:controller_item){ Releaf::ControllerDefinition.new(name: "y", controller: "_controller_") }
|
12
|
+
subject { described_class.new(template) }
|
13
|
+
|
14
|
+
before do
|
15
|
+
allow(template).to receive(:controller).and_return(controller)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "inherits `Releaf::Builders::Page::MenuBuilder`" do
|
19
|
+
expect(described_class.ancestors).to include(Releaf::Builders::Page::MenuBuilder)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#menu_item" do
|
23
|
+
before do
|
24
|
+
allow(subject).to receive(:item_attributes).and_return({})
|
25
|
+
allow(subject).to receive(:menu_item_group).and_return("_content_")
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when item is permitted" do
|
29
|
+
it "returns parent method content" do
|
30
|
+
allow(subject).to receive(:menu_item_permitted?).with(group_item).and_return(true)
|
31
|
+
expect(subject.menu_item(group_item)).to eq("<li>_content_</li>")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when item is not permitted" do
|
36
|
+
it "returns nil" do
|
37
|
+
allow(subject).to receive(:menu_item_permitted?).with(group_item).and_return(false)
|
38
|
+
expect(subject.menu_item(group_item)).to be nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#menu_item_permitted?" do
|
44
|
+
context "when item is instance of `Releaf::ControllerGroupDefinition`" do
|
45
|
+
before do
|
46
|
+
allow(group_item).to receive(:controllers).and_return([
|
47
|
+
Releaf::ControllerDefinition.new(name: "a1", controller: "c1"),
|
48
|
+
Releaf::ControllerDefinition.new(name: "a2", controller: "c2"),
|
49
|
+
Releaf::ControllerDefinition.new(name: "a3", controller: "c3"),
|
50
|
+
])
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when any of group item controller is allowed" do
|
54
|
+
it "returns true" do
|
55
|
+
allow(subject).to receive(:controller_permitted?).with("c1").and_return(false)
|
56
|
+
allow(subject).to receive(:controller_permitted?).with("c2").and_return(true)
|
57
|
+
expect(subject).to_not receive(:controller_permitted?).with("c3")
|
58
|
+
expect(subject.menu_item_permitted?(group_item)).to be true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when none of group item controller is allowed" do
|
63
|
+
it "returns false" do
|
64
|
+
allow(subject).to receive(:controller_permitted?).with("c1").and_return(false)
|
65
|
+
allow(subject).to receive(:controller_permitted?).with("c2").and_return(false)
|
66
|
+
allow(subject).to receive(:controller_permitted?).with("c3").and_return(false)
|
67
|
+
expect(subject.menu_item_permitted?(group_item)).to be false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when item is instance of `Releaf::ControllerDefinition`" do
|
73
|
+
context "when item controller is allowed" do
|
74
|
+
it "returns true" do
|
75
|
+
allow(subject).to receive(:controller_permitted?).with("_controller_").and_return(true)
|
76
|
+
expect(subject.menu_item_permitted?(controller_item)).to be true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when item controller is not allowed" do
|
81
|
+
it "returns false" do
|
82
|
+
allow(subject).to receive(:controller_permitted?).with("_controller_").and_return(false)
|
83
|
+
expect(subject.menu_item_permitted?(controller_item)).to be false
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#controller_permitted?" do
|
90
|
+
it "returns access controller controller permission query result for given controller name" do
|
91
|
+
user = Releaf::Permissions::User.new
|
92
|
+
allow(controller).to receive(:user).and_return("x")
|
93
|
+
access_control = Releaf::Permissions::AccessControl.new(user: user)
|
94
|
+
allow(Releaf.application.config.permissions.access_control).to receive(:new).with(user: "x").and_return(access_control)
|
95
|
+
allow(access_control).to receive(:controller_permitted?).with("kjasdasd").and_return("_true")
|
96
|
+
|
97
|
+
expect(subject.controller_permitted?("kjasdasd")).to eq("_true")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|