Module: Rbacan
- Defined in:
- lib/rbacan.rb,
lib/rbacan/engine.rb,
lib/rbacan/version.rb,
app/models/rbacan/role.rb,
lib/rbacan/permittable.rb,
lib/rbacan/authorizable.rb,
lib/rbacan/view_helpers.rb,
lib/rbacan/authorization.rb,
lib/rbacan/not_authorized.rb,
app/models/rbacan/user_role.rb,
lib/rbacan/route_constraint.rb,
app/models/rbacan/permission.rb,
lib/rbacan/host_authorization.rb,
lib/rbacan/roles_and_permissions.rb,
app/models/rbacan/role_permission.rb,
app/models/rbacan/application_record.rb,
lib/generators/rbacan/install_generator.rb
Defined Under Namespace
Modules: Authorizable, Authorization, Generators, Permittable, RolesAndPermissions, ViewHelpers
Classes: ApplicationRecord, AssignmentRequest, AuthorizationContext, AuthorizationRequest, ConfigurationError, Engine, Error, NotAuthorized, Permission, Role, RolePermission, RouteConstraint, UnsafeLegacyApi, UserRole
Constant Summary
collapse
- VERSION =
'0.5.0'
- @@authorization_adapter =
nil
- @@assignment_adapter =
nil
- @@legacy_mode =
false
- @@permittable_class =
'User'
- @@role_class =
'Rbacan::Role'
- @@role_table =
'roles'
- @@role_key =
:name
- @@user_role_class =
'Rbacan::UserRole'
- @@user_role_table =
'user_roles'
- @@permission_class =
'Rbacan::Permission'
- @@permission_table =
'permissions'
- @@permission_key =
:name
- @@role_permission_class =
'Rbacan::RolePermission'
- @@role_permission_table =
'role_permissions'
- @@unauthorized_handler =
:raise
- @@unauthorized_redirect_path =
'/'
- @@primary_key_type =
nil
- @@tenant_scoped =
false
- @@tenant_class =
'Tenant'
Class Method Summary
collapse
Class Method Details
.assign_permission_to_role(role_name, permission_name) ⇒ Object
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/rbacan.rb', line 97
def self.assign_permission_to_role(role_name, permission_name)
ensure_legacy_mode!(:assign_permission_to_role)
chosen_role = @@role_class.constantize.find_by(@@role_key => role_name.to_s)
given_permission = @@permission_class.constantize.find_by(@@permission_key => permission_name.to_s)
@@role_permission_class.constantize.create(
role_id: chosen_role.id,
permission_id: given_permission.id
)
end
|
.assign_role(user:, role:, context:) ⇒ Object
118
119
120
|
# File 'lib/rbacan/host_authorization.rb', line 118
def assign_role(user:, role:, context:)
call_assignment_adapter(:assign, user: user, role: role, context: context)
end
|
.authorized?(user:, permission: nil, role: nil, context:) ⇒ Boolean
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/rbacan/host_authorization.rb', line 103
def authorized?(user:, permission: nil, role: nil, context:)
validate_authorization_target!(permission, role)
validate_context!(context)
return false unless user && authorization_adapter
request = AuthorizationRequest.new(
user: user,
permission: permission&.to_s,
role: role&.to_s,
context: context
)
!!call_authorization_adapter(request)
end
|
108
109
110
|
# File 'lib/rbacan.rb', line 108
def self.configure
yield self
end
|
.create_permission(permission_name) ⇒ Object
91
92
93
94
95
|
# File 'lib/rbacan.rb', line 91
def self.create_permission(permission_name)
ensure_legacy_mode!(:create_permission)
@@permission_class.constantize.create(@@permission_key => permission_name.to_s)
end
|
.create_role(role_name) ⇒ Object
85
86
87
88
89
|
# File 'lib/rbacan.rb', line 85
def self.create_role(role_name)
ensure_legacy_mode!(:create_role)
@@role_class.constantize.create(@@role_key => role_name.to_s)
end
|
.ensure_legacy_mode!(method_name) ⇒ Object
96
97
98
99
100
101
|
# File 'lib/rbacan/host_authorization.rb', line 96
def ensure_legacy_mode!(method_name)
return if legacy_mode
raise UnsafeLegacyApi,
"#{method_name} is a legacy unscoped API; set Rbacan.legacy_mode = true to opt in"
end
|
.resolve_primary_key_type ⇒ Object
Resolves the effective primary key type.
Checks the explicit config first, then falls back to the Rails generator config.
77
78
79
80
81
82
83
|
# File 'lib/rbacan.rb', line 77
def self.resolve_primary_key_type
return primary_key_type if primary_key_type.present?
Rails.configuration.generators.options.dig(:active_record, :primary_key_type)
rescue StandardError
nil
end
|
.revoke_role(user:, role:, context:) ⇒ Object
122
123
124
|
# File 'lib/rbacan/host_authorization.rb', line 122
def revoke_role(user:, role:, context:)
call_assignment_adapter(:revoke, user: user, role: role, context: context)
end
|