permify 0.0.1 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +6 -1
- data/README.md +241 -16
- data/Rakefile +7 -7
- data/generator/generate-sdk.sh +157 -0
- data/generator/openapi-generator-cli.jar +0 -0
- data/generator/openapi.json +3699 -0
- data/lib/permify/api/bundle_api.rb +238 -0
- data/lib/permify/api/data_api.rb +526 -0
- data/lib/permify/api/permission_api.rb +528 -0
- data/lib/permify/api/schema_api.rb +310 -0
- data/lib/permify/api/tenancy_api.rb +215 -0
- data/lib/permify/api/watch_api.rb +94 -0
- data/lib/permify/api_client.rb +394 -0
- data/lib/permify/api_error.rb +58 -0
- data/lib/permify/configuration.rb +298 -0
- data/lib/permify/models/abstract_type.rb +228 -0
- data/lib/permify/models/any.rb +216 -0
- data/lib/permify/models/argument.rb +215 -0
- data/lib/permify/models/attribute.rb +233 -0
- data/lib/permify/models/attribute_definition.rb +247 -0
- data/lib/permify/models/attribute_filter.rb +226 -0
- data/lib/permify/models/attribute_read_request_metadata.rb +216 -0
- data/lib/permify/models/attribute_read_response.rb +228 -0
- data/lib/permify/models/attribute_type.rb +46 -0
- data/lib/permify/models/bulk_check_body.rb +248 -0
- data/lib/permify/models/bundle_delete_body.rb +216 -0
- data/lib/permify/models/bundle_delete_response.rb +214 -0
- data/lib/permify/models/bundle_read_body.rb +214 -0
- data/lib/permify/models/bundle_read_response.rb +214 -0
- data/lib/permify/models/bundle_run_response.rb +216 -0
- data/lib/permify/models/bundle_write_body.rb +218 -0
- data/lib/permify/models/bundle_write_response.rb +218 -0
- data/lib/permify/models/check_body.rb +264 -0
- data/lib/permify/models/check_result.rb +40 -0
- data/lib/permify/models/checked_expr.rb +258 -0
- data/lib/permify/models/child.rb +224 -0
- data/lib/permify/models/component.rb +41 -0
- data/lib/permify/models/comprehension.rb +281 -0
- data/lib/permify/models/computed_attribute.rb +215 -0
- data/lib/permify/models/computed_user_set.rb +215 -0
- data/lib/permify/models/constant.rb +317 -0
- data/lib/permify/models/context.rb +240 -0
- data/lib/permify/models/create_list.rb +230 -0
- data/lib/permify/models/create_struct.rb +228 -0
- data/lib/permify/models/data_bundle.rb +240 -0
- data/lib/permify/models/data_change.rb +255 -0
- data/lib/permify/models/data_change_operation.rb +40 -0
- data/lib/permify/models/data_changes.rb +228 -0
- data/lib/permify/models/data_delete_body.rb +224 -0
- data/lib/permify/models/data_delete_response.rb +216 -0
- data/lib/permify/models/data_write_body.rb +239 -0
- data/lib/permify/models/data_write_request_metadata.rb +216 -0
- data/lib/permify/models/data_write_response.rb +216 -0
- data/lib/permify/models/delete_relationships_body.rb +214 -0
- data/lib/permify/models/entity.rb +224 -0
- data/lib/permify/models/entity_definition.rb +264 -0
- data/lib/permify/models/entity_definition_reference.rb +41 -0
- data/lib/permify/models/entity_filter.rb +226 -0
- data/lib/permify/models/entry.rb +254 -0
- data/lib/permify/models/expand_leaf.rb +233 -0
- data/lib/permify/models/expand_tree_node.rb +248 -0
- data/lib/permify/models/expand_tree_node_operation.rb +41 -0
- data/lib/permify/models/expr.rb +279 -0
- data/lib/permify/models/expr_call.rb +237 -0
- data/lib/permify/models/extension.rb +236 -0
- data/lib/permify/models/function_type.rb +227 -0
- data/lib/permify/models/ident.rb +216 -0
- data/lib/permify/models/leaf.rb +242 -0
- data/lib/permify/models/list_type.rb +215 -0
- data/lib/permify/models/lookup_entity_body.rb +285 -0
- data/lib/permify/models/lookup_entity_stream_body.rb +285 -0
- data/lib/permify/models/lookup_subject_body.rb +284 -0
- data/lib/permify/models/map_type.rb +224 -0
- data/lib/permify/models/partial_write_body.rb +225 -0
- data/lib/permify/models/partials.rb +238 -0
- data/lib/permify/models/permission_bulk_check_request_item.rb +233 -0
- data/lib/permify/models/permission_bulk_check_response.rb +218 -0
- data/lib/permify/models/permission_check_request_metadata.rb +236 -0
- data/lib/permify/models/permission_check_response.rb +246 -0
- data/lib/permify/models/permission_check_response_metadata.rb +216 -0
- data/lib/permify/models/permission_definition.rb +225 -0
- data/lib/permify/models/permission_expand_body.rb +255 -0
- data/lib/permify/models/permission_expand_request_metadata.rb +226 -0
- data/lib/permify/models/permission_expand_response.rb +215 -0
- data/lib/permify/models/permission_lookup_entity_request_metadata.rb +236 -0
- data/lib/permify/models/permission_lookup_entity_response.rb +228 -0
- data/lib/permify/models/permission_lookup_entity_stream_response.rb +226 -0
- data/lib/permify/models/permission_lookup_subject_request_metadata.rb +236 -0
- data/lib/permify/models/permission_lookup_subject_response.rb +228 -0
- data/lib/permify/models/permission_subject_permission_request_metadata.rb +246 -0
- data/lib/permify/models/permission_subject_permission_response.rb +218 -0
- data/lib/permify/models/primitive_type.rb +44 -0
- data/lib/permify/models/read_attributes_body.rb +244 -0
- data/lib/permify/models/read_relationships_body.rb +244 -0
- data/lib/permify/models/relation_definition.rb +228 -0
- data/lib/permify/models/relation_reference.rb +226 -0
- data/lib/permify/models/relationship_delete_response.rb +215 -0
- data/lib/permify/models/relationship_read_request_metadata.rb +216 -0
- data/lib/permify/models/relationship_read_response.rb +228 -0
- data/lib/permify/models/relationship_write_request_metadata.rb +214 -0
- data/lib/permify/models/relationship_write_response.rb +215 -0
- data/lib/permify/models/rewrite.rb +249 -0
- data/lib/permify/models/rewrite_operation.rb +41 -0
- data/lib/permify/models/rule_definition.rb +237 -0
- data/lib/permify/models/run_bundle_body.rb +228 -0
- data/lib/permify/models/schema_definition.rb +242 -0
- data/lib/permify/models/schema_definition_reference.rb +40 -0
- data/lib/permify/models/schema_list.rb +223 -0
- data/lib/permify/models/schema_list_body.rb +226 -0
- data/lib/permify/models/schema_list_response.rb +235 -0
- data/lib/permify/models/schema_partial_write_request_metadata.rb +216 -0
- data/lib/permify/models/schema_partial_write_response.rb +216 -0
- data/lib/permify/models/schema_read_body.rb +215 -0
- data/lib/permify/models/schema_read_request_metadata.rb +216 -0
- data/lib/permify/models/schema_read_response.rb +215 -0
- data/lib/permify/models/schema_write_body.rb +216 -0
- data/lib/permify/models/schema_write_response.rb +216 -0
- data/lib/permify/models/select.rb +235 -0
- data/lib/permify/models/source_info.rb +274 -0
- data/lib/permify/models/status.rb +234 -0
- data/lib/permify/models/stream_result_of_permission_lookup_entity_stream_response.rb +223 -0
- data/lib/permify/models/stream_result_of_watch_response.rb +223 -0
- data/lib/permify/models/string_array_value.rb +218 -0
- data/lib/permify/models/subject.rb +233 -0
- data/lib/permify/models/subject_filter.rb +235 -0
- data/lib/permify/models/subject_permission_body.rb +242 -0
- data/lib/permify/models/subjects.rb +218 -0
- data/lib/permify/models/tenant.rb +236 -0
- data/lib/permify/models/tenant_create_request.rb +226 -0
- data/lib/permify/models/tenant_create_response.rb +215 -0
- data/lib/permify/models/tenant_delete_response.rb +216 -0
- data/lib/permify/models/tenant_list_request.rb +226 -0
- data/lib/permify/models/tenant_list_response.rb +228 -0
- data/lib/permify/models/tuple.rb +233 -0
- data/lib/permify/models/tuple_filter.rb +233 -0
- data/lib/permify/models/tuple_set.rb +215 -0
- data/lib/permify/models/tuple_to_user_set.rb +224 -0
- data/lib/permify/models/v1_call.rb +226 -0
- data/lib/permify/models/v1_expand.rb +255 -0
- data/lib/permify/models/v1_operation.rb +254 -0
- data/lib/permify/models/v1alpha1_reference.rb +237 -0
- data/lib/permify/models/v1alpha1_type.rb +350 -0
- data/lib/permify/models/values.rb +216 -0
- data/lib/permify/models/version.rb +225 -0
- data/lib/permify/models/watch_body.rb +216 -0
- data/lib/permify/models/watch_response.rb +215 -0
- data/lib/permify/models/well_known_type.rb +41 -0
- data/lib/permify/models/write_relationships_body.rb +227 -0
- data/lib/permify/version.rb +13 -1
- data/lib/permify.rb +175 -15
- data/permify-ruby.gemspec +39 -0
- data/permify.gemspec +38 -27
- data/spec/api/bundle_api_spec.rb +71 -0
- data/spec/api/data_api_spec.rb +119 -0
- data/spec/api/permission_api_spec.rb +120 -0
- data/spec/api/schema_api_spec.rb +83 -0
- data/spec/api/tenancy_api_spec.rb +68 -0
- data/spec/api/watch_api_spec.rb +47 -0
- data/spec/models/abstract_type_spec.rb +42 -0
- data/spec/models/any_spec.rb +36 -0
- data/spec/models/argument_spec.rb +36 -0
- data/spec/models/attribute_definition_spec.rb +42 -0
- data/spec/models/attribute_filter_spec.rb +42 -0
- data/spec/models/attribute_read_request_metadata_spec.rb +36 -0
- data/spec/models/attribute_read_response_spec.rb +42 -0
- data/spec/models/attribute_spec.rb +48 -0
- data/spec/models/attribute_type_spec.rb +30 -0
- data/spec/models/bulk_check_body_spec.rb +54 -0
- data/spec/models/bundle_delete_body_spec.rb +36 -0
- data/spec/models/bundle_delete_response_spec.rb +36 -0
- data/spec/models/bundle_read_body_spec.rb +36 -0
- data/spec/models/bundle_read_response_spec.rb +36 -0
- data/spec/models/bundle_run_response_spec.rb +36 -0
- data/spec/models/bundle_write_body_spec.rb +36 -0
- data/spec/models/bundle_write_response_spec.rb +36 -0
- data/spec/models/check_body_spec.rb +66 -0
- data/spec/models/check_result_spec.rb +30 -0
- data/spec/models/checked_expr_spec.rb +60 -0
- data/spec/models/child_spec.rb +42 -0
- data/spec/models/component_spec.rb +30 -0
- data/spec/models/comprehension_spec.rb +78 -0
- data/spec/models/computed_attribute_spec.rb +36 -0
- data/spec/models/computed_user_set_spec.rb +36 -0
- data/spec/models/constant_spec.rb +84 -0
- data/spec/models/context_spec.rb +48 -0
- data/spec/models/create_list_spec.rb +42 -0
- data/spec/models/create_struct_spec.rb +42 -0
- data/spec/models/data_bundle_spec.rb +48 -0
- data/spec/models/data_change_operation_spec.rb +30 -0
- data/spec/models/data_change_spec.rb +48 -0
- data/spec/models/data_changes_spec.rb +42 -0
- data/spec/models/data_delete_body_spec.rb +42 -0
- data/spec/models/data_delete_response_spec.rb +36 -0
- data/spec/models/data_write_body_spec.rb +48 -0
- data/spec/models/data_write_request_metadata_spec.rb +36 -0
- data/spec/models/data_write_response_spec.rb +36 -0
- data/spec/models/delete_relationships_body_spec.rb +36 -0
- data/spec/models/entity_definition_reference_spec.rb +30 -0
- data/spec/models/entity_definition_spec.rb +60 -0
- data/spec/models/entity_filter_spec.rb +42 -0
- data/spec/models/entity_spec.rb +42 -0
- data/spec/models/entry_spec.rb +60 -0
- data/spec/models/expand_leaf_spec.rb +48 -0
- data/spec/models/expand_tree_node_operation_spec.rb +30 -0
- data/spec/models/expand_tree_node_spec.rb +42 -0
- data/spec/models/expr_call_spec.rb +48 -0
- data/spec/models/expr_spec.rb +78 -0
- data/spec/models/extension_spec.rb +48 -0
- data/spec/models/function_type_spec.rb +42 -0
- data/spec/models/ident_spec.rb +36 -0
- data/spec/models/leaf_spec.rb +54 -0
- data/spec/models/list_type_spec.rb +36 -0
- data/spec/models/lookup_entity_body_spec.rb +78 -0
- data/spec/models/lookup_entity_stream_body_spec.rb +78 -0
- data/spec/models/lookup_subject_body_spec.rb +78 -0
- data/spec/models/map_type_spec.rb +42 -0
- data/spec/models/partial_write_body_spec.rb +42 -0
- data/spec/models/partials_spec.rb +48 -0
- data/spec/models/permission_bulk_check_request_item_spec.rb +48 -0
- data/spec/models/permission_bulk_check_response_spec.rb +36 -0
- data/spec/models/permission_check_request_metadata_spec.rb +48 -0
- data/spec/models/permission_check_response_metadata_spec.rb +36 -0
- data/spec/models/permission_check_response_spec.rb +42 -0
- data/spec/models/permission_definition_spec.rb +42 -0
- data/spec/models/permission_expand_body_spec.rb +60 -0
- data/spec/models/permission_expand_request_metadata_spec.rb +42 -0
- data/spec/models/permission_expand_response_spec.rb +36 -0
- data/spec/models/permission_lookup_entity_request_metadata_spec.rb +48 -0
- data/spec/models/permission_lookup_entity_response_spec.rb +42 -0
- data/spec/models/permission_lookup_entity_stream_response_spec.rb +42 -0
- data/spec/models/permission_lookup_subject_request_metadata_spec.rb +48 -0
- data/spec/models/permission_lookup_subject_response_spec.rb +42 -0
- data/spec/models/permission_subject_permission_request_metadata_spec.rb +54 -0
- data/spec/models/permission_subject_permission_response_spec.rb +36 -0
- data/spec/models/primitive_type_spec.rb +30 -0
- data/spec/models/read_attributes_body_spec.rb +54 -0
- data/spec/models/read_relationships_body_spec.rb +54 -0
- data/spec/models/relation_definition_spec.rb +42 -0
- data/spec/models/relation_reference_spec.rb +42 -0
- data/spec/models/relationship_delete_response_spec.rb +36 -0
- data/spec/models/relationship_read_request_metadata_spec.rb +36 -0
- data/spec/models/relationship_read_response_spec.rb +42 -0
- data/spec/models/relationship_write_request_metadata_spec.rb +36 -0
- data/spec/models/relationship_write_response_spec.rb +36 -0
- data/spec/models/rewrite_operation_spec.rb +30 -0
- data/spec/models/rewrite_spec.rb +42 -0
- data/spec/models/rule_definition_spec.rb +48 -0
- data/spec/models/run_bundle_body_spec.rb +42 -0
- data/spec/models/schema_definition_reference_spec.rb +30 -0
- data/spec/models/schema_definition_spec.rb +48 -0
- data/spec/models/schema_list_body_spec.rb +42 -0
- data/spec/models/schema_list_response_spec.rb +48 -0
- data/spec/models/schema_list_spec.rb +42 -0
- data/spec/models/schema_partial_write_request_metadata_spec.rb +36 -0
- data/spec/models/schema_partial_write_response_spec.rb +36 -0
- data/spec/models/schema_read_body_spec.rb +36 -0
- data/spec/models/schema_read_request_metadata_spec.rb +36 -0
- data/spec/models/schema_read_response_spec.rb +36 -0
- data/spec/models/schema_write_body_spec.rb +36 -0
- data/spec/models/schema_write_response_spec.rb +36 -0
- data/spec/models/select_spec.rb +48 -0
- data/spec/models/source_info_spec.rb +66 -0
- data/spec/models/status_spec.rb +48 -0
- data/spec/models/stream_result_of_permission_lookup_entity_stream_response_spec.rb +42 -0
- data/spec/models/stream_result_of_watch_response_spec.rb +42 -0
- data/spec/models/string_array_value_spec.rb +36 -0
- data/spec/models/subject_filter_spec.rb +48 -0
- data/spec/models/subject_permission_body_spec.rb +54 -0
- data/spec/models/subject_spec.rb +48 -0
- data/spec/models/subjects_spec.rb +36 -0
- data/spec/models/tenant_create_request_spec.rb +42 -0
- data/spec/models/tenant_create_response_spec.rb +36 -0
- data/spec/models/tenant_delete_response_spec.rb +36 -0
- data/spec/models/tenant_list_request_spec.rb +42 -0
- data/spec/models/tenant_list_response_spec.rb +42 -0
- data/spec/models/tenant_spec.rb +48 -0
- data/spec/models/tuple_filter_spec.rb +48 -0
- data/spec/models/tuple_set_spec.rb +36 -0
- data/spec/models/tuple_spec.rb +48 -0
- data/spec/models/tuple_to_user_set_spec.rb +42 -0
- data/spec/models/v1_call_spec.rb +42 -0
- data/spec/models/v1_expand_spec.rb +60 -0
- data/spec/models/v1_operation_spec.rb +54 -0
- data/spec/models/v1alpha1_reference_spec.rb +48 -0
- data/spec/models/v1alpha1_type_spec.rb +108 -0
- data/spec/models/values_spec.rb +36 -0
- data/spec/models/version_spec.rb +42 -0
- data/spec/models/watch_body_spec.rb +36 -0
- data/spec/models/watch_response_spec.rb +36 -0
- data/spec/models/well_known_type_spec.rb +30 -0
- data/spec/models/write_relationships_body_spec.rb +42 -0
- data/spec/spec_helper.rb +101 -3
- metadata +449 -85
- data/.gitignore +0 -17
- data/.rspec +0 -2
- data/LICENSE.txt +0 -22
- data/lib/permify/authorization.rb +0 -17
- data/lib/permify/clearance.rb +0 -29
- data/lib/permify/permission/combination/any.rb +0 -13
- data/lib/permify/permission/combination.rb +0 -4
- data/lib/permify/permission/combination_map.rb +0 -23
- data/lib/permify/permission/dynamic.rb +0 -13
- data/lib/permify/permission/null.rb +0 -7
- data/lib/permify/permission/static.rb +0 -7
- data/lib/permify/permission.rb +0 -10
- data/lib/permify/permission_map.rb +0 -32
- data/lib/permify/repository.rb +0 -68
- data/spec/integration_spec.rb +0 -114
data/lib/permify/clearance.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Clearance: Official authorization for something to proceed or take place
|
|
2
|
-
#
|
|
3
|
-
class Permify::Clearance
|
|
4
|
-
def initialize(repo)
|
|
5
|
-
@repo = repo
|
|
6
|
-
@permissions = Permify::PermissionMap.new
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def add(resource, action)
|
|
10
|
-
permission = resolve_to_permission(resource, action)
|
|
11
|
-
permissions.store(resource, action, permission)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def find(resource, action)
|
|
15
|
-
if !repo.permission_combination?(resource, action)
|
|
16
|
-
permissions.find(resource, action) || Permify::Permission::Null.new
|
|
17
|
-
else
|
|
18
|
-
combination = repo.find_permission_combination(resource, action)
|
|
19
|
-
combination.resolve(self)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
attr_reader :permissions, :repo
|
|
25
|
-
|
|
26
|
-
def resolve_to_permission(resource, action_name)
|
|
27
|
-
repo.find_permission(resource, action_name)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
class Permify::Permission::CombinationMap
|
|
2
|
-
def initialize(combinations)
|
|
3
|
-
@combinations = combinations
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
def resolve(clearance)
|
|
7
|
-
permissions = list_permissions(clearance)
|
|
8
|
-
Permify::Permission::Combination::Any.new(permissions)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
attr_reader :combinations
|
|
13
|
-
|
|
14
|
-
def list_permissions(clearance)
|
|
15
|
-
permissions = []
|
|
16
|
-
combinations.each do |resource, actions|
|
|
17
|
-
[actions].flatten.each do |action|
|
|
18
|
-
permissions << clearance.find(resource, action)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
permissions
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/permify/permission.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Provides a convenient way to store and retrieve permission data
|
|
2
|
-
class Permify::PermissionMap
|
|
3
|
-
def initialize
|
|
4
|
-
@data = {}
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def store(resource, action, info)
|
|
8
|
-
resource_key, action_key = to_keys(resource, action)
|
|
9
|
-
data[resource_key] ||= {}
|
|
10
|
-
data[resource_key][action_key] = info
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def find(resource, action)
|
|
14
|
-
resource_key, action_key = to_keys(resource, action)
|
|
15
|
-
data.fetch(resource_key, {})[action_key]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
attr_reader :data
|
|
20
|
-
|
|
21
|
-
# Transforms resource and action into keys for use in internal hashes
|
|
22
|
-
#
|
|
23
|
-
# @param resource [Class, Object] resource object or its class
|
|
24
|
-
# @param action [String, #to_sym]
|
|
25
|
-
#
|
|
26
|
-
# @return keys [Array<Symbol>] array with resource and action key
|
|
27
|
-
#
|
|
28
|
-
def to_keys(resource, action)
|
|
29
|
-
resource_class = resource.is_a?(Class) ? resource : resource.class
|
|
30
|
-
[resource_class.name, action].map(&:to_sym)
|
|
31
|
-
end
|
|
32
|
-
end
|
data/lib/permify/repository.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
class Permify::Repository
|
|
2
|
-
|
|
3
|
-
# Define a static permission
|
|
4
|
-
#
|
|
5
|
-
# @param resource_class [Class]
|
|
6
|
-
# @param action [Symbol, String]
|
|
7
|
-
#
|
|
8
|
-
# @return [undefined]
|
|
9
|
-
#
|
|
10
|
-
def static(resource_class, action)
|
|
11
|
-
permission = Permify::Permission::Static.new
|
|
12
|
-
permissions.store(resource_class, action, permission)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Define a dynamic permission
|
|
16
|
-
#
|
|
17
|
-
# @param resource_class [Class]
|
|
18
|
-
# @param action [Symbol, String]
|
|
19
|
-
#
|
|
20
|
-
# @return [undefined]
|
|
21
|
-
#
|
|
22
|
-
def dynamic(resource_class, action, *args)
|
|
23
|
-
permission = Permify::Permission::Dynamic.new args.flatten
|
|
24
|
-
permissions.store(resource_class, action, permission)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Creates a permission that's granted whenever any of the combined
|
|
28
|
-
# permissions is granted
|
|
29
|
-
#
|
|
30
|
-
# @param resource_class [Class]
|
|
31
|
-
# @param action [String, #to_sym]
|
|
32
|
-
#
|
|
33
|
-
# @return [undefined]
|
|
34
|
-
#
|
|
35
|
-
def any(resource_class, action, combinations)
|
|
36
|
-
combination_map = Permify::Permission::CombinationMap.new(combinations)
|
|
37
|
-
permission_combinations.store(resource_class, action, combination_map)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Finds permission in this repository
|
|
41
|
-
#
|
|
42
|
-
# @param resource [Class]
|
|
43
|
-
# @param action [String, #to_sym]
|
|
44
|
-
#
|
|
45
|
-
# @return permission [Permify::Permission, nil]
|
|
46
|
-
#
|
|
47
|
-
def find_permission(resource, action)
|
|
48
|
-
permissions.find(resource, action)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def permission_combination?(resource_class, action)
|
|
52
|
-
!!find_permission_combination(resource_class, action)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def find_permission_combination(resource, action)
|
|
56
|
-
permission_combinations.find(resource, action)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
protected
|
|
60
|
-
|
|
61
|
-
def permissions
|
|
62
|
-
@permissions ||= Permify::PermissionMap.new
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def permission_combinations
|
|
66
|
-
@permission_combinations ||= Permify::PermissionMap.new
|
|
67
|
-
end
|
|
68
|
-
end
|
data/spec/integration_spec.rb
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
class Post
|
|
4
|
-
def initialize(owner)
|
|
5
|
-
@owner = owner
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def owner?(user)
|
|
9
|
-
@owner == user
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
class OwnerCheck
|
|
14
|
-
attr_reader :candidate, :resource
|
|
15
|
-
|
|
16
|
-
def initialize(candidate, resource)
|
|
17
|
-
@candidate = candidate
|
|
18
|
-
@resource = resource
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def success?
|
|
22
|
-
resource.owner?(candidate)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
REPO = Permify::Repository.new
|
|
27
|
-
|
|
28
|
-
REPO.static(Post, :show)
|
|
29
|
-
REPO.static(Post, :create)
|
|
30
|
-
|
|
31
|
-
# :edit permission granted if either of its dependencies (:edit_all or
|
|
32
|
-
# :edit_own) is granted
|
|
33
|
-
REPO.any(Post, :edit, { Post => [:edit_all, :edit_own] })
|
|
34
|
-
|
|
35
|
-
REPO.static(Post, :edit_all)
|
|
36
|
-
REPO.dynamic(Post, :edit_own, [OwnerCheck])
|
|
37
|
-
|
|
38
|
-
class Admin
|
|
39
|
-
def permissions
|
|
40
|
-
Permify::Clearance.new(REPO).tap do |c|
|
|
41
|
-
c.add Post, :show
|
|
42
|
-
c.add Post, :create
|
|
43
|
-
c.add Post, :edit_all
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
class User
|
|
49
|
-
def permissions
|
|
50
|
-
Permify::Clearance.new(REPO).tap do |c|
|
|
51
|
-
c.add Post, :show
|
|
52
|
-
c.add Post, :create
|
|
53
|
-
c.add Post, :edit_own
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe Permify::Authorization, "integration" do
|
|
59
|
-
let(:post) { Post.new(post_owner) }
|
|
60
|
-
let(:post_owner) { user }
|
|
61
|
-
let(:admin) { Admin.new }
|
|
62
|
-
let(:user) { User.new }
|
|
63
|
-
|
|
64
|
-
describe "admin" do
|
|
65
|
-
let(:auth) { Permify::Authorization.new(admin) }
|
|
66
|
-
|
|
67
|
-
describe "static create" do
|
|
68
|
-
subject { auth.can?(:create, post)}
|
|
69
|
-
it { should be_true }
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe "static show" do
|
|
73
|
-
subject { auth.can?(:show, post)}
|
|
74
|
-
it { should be_true }
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
describe "static edit" do
|
|
78
|
-
subject { auth.can?(:edit, post)}
|
|
79
|
-
it { should be_true }
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
describe "user" do
|
|
84
|
-
let(:auth) { Permify::Authorization.new(user) }
|
|
85
|
-
|
|
86
|
-
describe "Post :edit_own" do
|
|
87
|
-
subject { auth.can?(:edit_own, post)}
|
|
88
|
-
|
|
89
|
-
context "when owner" do
|
|
90
|
-
let(:post_owner) { user }
|
|
91
|
-
it { should be_true }
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
context "when not owner" do
|
|
95
|
-
let(:post_owner) { admin }
|
|
96
|
-
it { should_not be_true }
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
describe "Post :edit" do
|
|
101
|
-
subject { auth.can?(:edit, post)}
|
|
102
|
-
|
|
103
|
-
context "when owner" do
|
|
104
|
-
let(:post_owner) { user }
|
|
105
|
-
it { should be_true }
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
context "when not owner" do
|
|
109
|
-
let(:post_owner) { admin }
|
|
110
|
-
it { should_not be_true }
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|