cantango 0.8.0
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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +58 -0
- data/LICENSE.txt +20 -0
- data/README.textile +211 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/cantango.gemspec +658 -0
- data/ideas/feature_list.markdown +58 -0
- data/lib/cantango.rb +32 -0
- data/lib/cantango/ability.rb +56 -0
- data/lib/cantango/ability/cache.rb +95 -0
- data/lib/cantango/ability/cache/base_cache.rb +26 -0
- data/lib/cantango/ability/cache/kompiler.rb +24 -0
- data/lib/cantango/ability/cache/moneta_cache.rb +32 -0
- data/lib/cantango/ability/cache/session_cache.rb +38 -0
- data/lib/cantango/ability/class_methods.rb +27 -0
- data/lib/cantango/ability/masquerade_helpers.rb +19 -0
- data/lib/cantango/ability/permission_helpers.rb +20 -0
- data/lib/cantango/ability/permit_helpers.rb +27 -0
- data/lib/cantango/ability/role_helpers.rb +26 -0
- data/lib/cantango/ability/scope.rb +20 -0
- data/lib/cantango/ability/user_helpers.rb +22 -0
- data/lib/cantango/api.rb +5 -0
- data/lib/cantango/api/aliases.rb +8 -0
- data/lib/cantango/api/aliases/account_permit.rb +8 -0
- data/lib/cantango/api/aliases/license.rb +7 -0
- data/lib/cantango/api/aliases/permit.rb +9 -0
- data/lib/cantango/api/aliases/role_group_permit.rb +7 -0
- data/lib/cantango/api/aliases/role_permit.rb +7 -0
- data/lib/cantango/api/aliases/user_permit.rb +8 -0
- data/lib/cantango/api/common.rb +10 -0
- data/lib/cantango/api/options.rb +16 -0
- data/lib/cantango/api/user.rb +20 -0
- data/lib/cantango/api/user/ability.rb +38 -0
- data/lib/cantango/api/user/can.rb +26 -0
- data/lib/cantango/api/user/scope.rb +29 -0
- data/lib/cantango/api/user_account.rb +20 -0
- data/lib/cantango/api/user_account/ability.rb +44 -0
- data/lib/cantango/api/user_account/can.rb +26 -0
- data/lib/cantango/api/user_account/scope.rb +29 -0
- data/lib/cantango/cache.rb +6 -0
- data/lib/cantango/cache/moneta_cache.rb +68 -0
- data/lib/cantango/cancan/rule.rb +6 -0
- data/lib/cantango/configuration.rb +83 -0
- data/lib/cantango/configuration/ability.rb +13 -0
- data/lib/cantango/configuration/autoload.rb +38 -0
- data/lib/cantango/configuration/categories.rb +55 -0
- data/lib/cantango/configuration/engines.rb +49 -0
- data/lib/cantango/configuration/engines/cache.rb +20 -0
- data/lib/cantango/configuration/engines/engine.rb +31 -0
- data/lib/cantango/configuration/engines/permission.rb +49 -0
- data/lib/cantango/configuration/engines/permit.rb +26 -0
- data/lib/cantango/configuration/engines/store.rb +24 -0
- data/lib/cantango/configuration/factory.rb +59 -0
- data/lib/cantango/configuration/guest.rb +57 -0
- data/lib/cantango/configuration/hash_registry.rb +62 -0
- data/lib/cantango/configuration/models.rb +48 -0
- data/lib/cantango/configuration/registry.rb +53 -0
- data/lib/cantango/configuration/role_groups.rb +15 -0
- data/lib/cantango/configuration/role_registry.rb +43 -0
- data/lib/cantango/configuration/roles.rb +16 -0
- data/lib/cantango/configuration/user.rb +47 -0
- data/lib/cantango/configuration/user_account.rb +23 -0
- data/lib/cantango/configuration/user_accounts.rb +7 -0
- data/lib/cantango/configuration/users.rb +7 -0
- data/lib/cantango/helpers.rb +5 -0
- data/lib/cantango/helpers/role_methods.rb +26 -0
- data/lib/cantango/permission_engine.rb +7 -0
- data/lib/cantango/permission_engine/builder.rb +6 -0
- data/lib/cantango/permission_engine/collector.rb +43 -0
- data/lib/cantango/permission_engine/compiler.rb +67 -0
- data/lib/cantango/permission_engine/evaluator.rb +34 -0
- data/lib/cantango/permission_engine/factory.rb +60 -0
- data/lib/cantango/permission_engine/loader.rb +7 -0
- data/lib/cantango/permission_engine/loader/base.rb +39 -0
- data/lib/cantango/permission_engine/loader/categories.rb +50 -0
- data/lib/cantango/permission_engine/loader/permissions.rb +66 -0
- data/lib/cantango/permission_engine/moneta_store.rb +30 -0
- data/lib/cantango/permission_engine/parser.rb +32 -0
- data/lib/cantango/permission_engine/parser/categories.rb +18 -0
- data/lib/cantango/permission_engine/parser/category.rb +34 -0
- data/lib/cantango/permission_engine/parser/default.rb +20 -0
- data/lib/cantango/permission_engine/parser/ownership.rb +32 -0
- data/lib/cantango/permission_engine/parser/permissions.rb +33 -0
- data/lib/cantango/permission_engine/parser/regex.rb +35 -0
- data/lib/cantango/permission_engine/parser/relationship.rb +23 -0
- data/lib/cantango/permission_engine/parser/rule.rb +31 -0
- data/lib/cantango/permission_engine/permission.rb +40 -0
- data/lib/cantango/permission_engine/selector.rb +16 -0
- data/lib/cantango/permission_engine/selector/base.rb +19 -0
- data/lib/cantango/permission_engine/selector/licenses.rb +19 -0
- data/lib/cantango/permission_engine/selector/role_groups.rb +24 -0
- data/lib/cantango/permission_engine/selector/roles.rb +25 -0
- data/lib/cantango/permission_engine/selector/users.rb +22 -0
- data/lib/cantango/permission_engine/statement.rb +14 -0
- data/lib/cantango/permission_engine/statements.rb +35 -0
- data/lib/cantango/permission_engine/store.rb +33 -0
- data/lib/cantango/permission_engine/yaml_store.rb +108 -0
- data/lib/cantango/permit_engine.rb +8 -0
- data/lib/cantango/permit_engine/account_permit.rb +41 -0
- data/lib/cantango/permit_engine/account_permit/builder.rb +22 -0
- data/lib/cantango/permit_engine/account_permit/finder.rb +20 -0
- data/lib/cantango/permit_engine/builder.rb +8 -0
- data/lib/cantango/permit_engine/builder/base.rb +50 -0
- data/lib/cantango/permit_engine/builder/special_permits.rb +20 -0
- data/lib/cantango/permit_engine/compatibility.rb +20 -0
- data/lib/cantango/permit_engine/executor.rb +7 -0
- data/lib/cantango/permit_engine/executor/abstract.rb +40 -0
- data/lib/cantango/permit_engine/executor/base.rb +51 -0
- data/lib/cantango/permit_engine/executor/system.rb +13 -0
- data/lib/cantango/permit_engine/factory.rb +45 -0
- data/lib/cantango/permit_engine/finder.rb +39 -0
- data/lib/cantango/permit_engine/license.rb +37 -0
- data/lib/cantango/permit_engine/license/loader.rb +19 -0
- data/lib/cantango/permit_engine/license/rules.rb +17 -0
- data/lib/cantango/permit_engine/permit.rb +149 -0
- data/lib/cantango/permit_engine/role_group_permit.rb +37 -0
- data/lib/cantango/permit_engine/role_group_permit/builder.rb +47 -0
- data/lib/cantango/permit_engine/role_group_permit/finder.rb +20 -0
- data/lib/cantango/permit_engine/role_matcher.rb +13 -0
- data/lib/cantango/permit_engine/role_permit.rb +38 -0
- data/lib/cantango/permit_engine/role_permit/builder.rb +46 -0
- data/lib/cantango/permit_engine/role_permit/finder.rb +19 -0
- data/lib/cantango/permit_engine/user_permit.rb +40 -0
- data/lib/cantango/permit_engine/user_permit/builder.rb +21 -0
- data/lib/cantango/permit_engine/user_permit/finder.rb +20 -0
- data/lib/cantango/permit_engine/util.rb +19 -0
- data/lib/cantango/rails.rb +5 -0
- data/lib/cantango/rails/base_helpers.rb +26 -0
- data/lib/cantango/rails/controller_helpers.rb +15 -0
- data/lib/cantango/rails/engine.rb +47 -0
- data/lib/cantango/rails/railtie.rb +7 -0
- data/lib/cantango/rails/view_helpers.rb +15 -0
- data/lib/cantango/rspec.rb +1 -0
- data/lib/cantango/rspec/config.rb +9 -0
- data/lib/cantango/rspec/matchers.rb +9 -0
- data/lib/cantango/rspec/matchers/be_allowed_to.rb +26 -0
- data/lib/cantango/rspec/matchers/have_license.rb +11 -0
- data/lib/cantango/rspec/matchers/have_license_class.rb +14 -0
- data/lib/cantango/rspec/matchers/have_license_file.rb +82 -0
- data/lib/cantango/rules.rb +23 -0
- data/lib/cantango/rules/adaptor.rb +32 -0
- data/lib/cantango/rules/adaptor/active_record.rb +13 -0
- data/lib/cantango/rules/adaptor/generic.rb +16 -0
- data/lib/cantango/rules/adaptor/mongoid.rb +13 -0
- data/lib/cantango/rules/dsl.rb +24 -0
- data/lib/cantango/rules/rule_class.rb +11 -0
- data/lib/cantango/rules/scope.rb +24 -0
- data/lib/cantango/rules/user_relation.rb +68 -0
- data/lib/cantango/users.rb +5 -0
- data/lib/cantango/users/macros.rb +9 -0
- data/lib/cantango/users/masquerade.rb +22 -0
- data/lib/cantango/users/masquerade/session_active_user.rb +18 -0
- data/lib/cantango/users/user.rb +30 -0
- data/lib/cantango/users/user_account.rb +23 -0
- data/lib/generators/cantango/base.rb +52 -0
- data/lib/generators/cantango/license/license_generator.rb +34 -0
- data/lib/generators/cantango/license/templates/license.erb +10 -0
- data/lib/generators/cantango/license_base.rb +15 -0
- data/lib/generators/cantango/licenses/licenses_generator.rb +31 -0
- data/lib/generators/cantango/permit_generator.rb +36 -0
- data/lib/generators/cantango/role_permit/role_permit_generator.rb +42 -0
- data/lib/generators/cantango/role_permit/templates/account_permit.erb +4 -0
- data/lib/generators/cantango/role_permit/templates/role_group_permit.erb +14 -0
- data/lib/generators/cantango/role_permit/templates/role_permit.erb +13 -0
- data/lib/generators/cantango/role_permits/role_permits_generator.rb +127 -0
- data/spec/Note_on_licenses.textile +44 -0
- data/spec/Refactor_into_engines.textile +115 -0
- data/spec/TODO +7 -0
- data/spec/active_record/AR_README.textile +20 -0
- data/spec/active_record/config_helper.rb +108 -0
- data/spec/active_record/db/database.yml +4 -0
- data/spec/active_record/helper/ar_config.rb +19 -0
- data/spec/active_record/helper/permits_config.rb +12 -0
- data/spec/active_record/helper/rails_config.rb +6 -0
- data/spec/active_record/helper/rspec_config.rb +20 -0
- data/spec/active_record/migrations/001_create_user.rb +14 -0
- data/spec/active_record/migrations/002_create_comment.rb +13 -0
- data/spec/active_record/migrations/003_create_post.rb +13 -0
- data/spec/active_record/migrations/004_create_article.rb +13 -0
- data/spec/active_record/migrations/005_create_account.rb +13 -0
- data/spec/active_record/migrations/006_create_todo.rb +12 -0
- data/spec/active_record/migrations/007_create_user_todos.rb +13 -0
- data/spec/active_record/scenarios/SCENARIOS README.textile +19 -0
- data/spec/active_record/scenarios/engines/permission_engine/cantango_permissions.yml +63 -0
- data/spec/active_record/scenarios/engines/permission_engine/categories.yml +6 -0
- data/spec/active_record/scenarios/engines/permission_engine/tango_permission_yml_spec.rb +77 -0
- data/spec/active_record/scenarios/engines/permission_engine/users.rb +88 -0
- data/spec/active_record/scenarios/engines/permit_engine/licenses_spec.rb +37 -0
- data/spec/active_record/scenarios/engines/permit_engine/role_groups_permits_spec.rb +35 -0
- data/spec/active_record/scenarios/guest_user_admin/admin_user_spec.rb +19 -0
- data/spec/active_record/scenarios/guest_user_admin/docs/GUEST_ADMIN_USER_SCENARIO.textile +20 -0
- data/spec/active_record/scenarios/guest_user_admin/editor_spec.rb +19 -0
- data/spec/active_record/scenarios/guest_user_admin/guest_user_spec.rb +16 -0
- data/spec/active_record/scenarios/guest_user_admin/user_having_user_and_editor_roles_spec.rb +19 -0
- data/spec/active_record/scenarios/guest_user_admin/user_spec.rb +32 -0
- data/spec/active_record/scenarios/masquerading/masquerading_for_admin_account_spec.rb +41 -0
- data/spec/active_record/scenarios/masquerading/masquerading_for_admin_user_spec.rb +38 -0
- data/spec/active_record/scenarios/shared/api.rb +4 -0
- data/spec/active_record/scenarios/shared/can_tango.rb +2 -0
- data/spec/active_record/scenarios/shared/examples/user_accounts.rb +47 -0
- data/spec/active_record/scenarios/shared/examples/users.rb +85 -0
- data/spec/active_record/scenarios/shared/licenses/musicians_license.rb +12 -0
- data/spec/active_record/scenarios/shared/models/items.rb +26 -0
- data/spec/active_record/scenarios/shared/models/todo.rb +4 -0
- data/spec/active_record/scenarios/shared/models/user_todo.rb +4 -0
- data/spec/active_record/scenarios/shared/models/users.rb +46 -0
- data/spec/active_record/scenarios/shared/permits/PERMITS README.textile +3 -0
- data/spec/active_record/scenarios/shared/permits/account_permits/admin_account_permit.rb +30 -0
- data/spec/active_record/scenarios/shared/permits/account_permits/guest_account_permit.rb +16 -0
- data/spec/active_record/scenarios/shared/permits/account_permits/user_account_permit.rb +46 -0
- data/spec/active_record/scenarios/shared/permits/role/admin_permit.rb +11 -0
- data/spec/active_record/scenarios/shared/permits/role/editor_permit.rb +42 -0
- data/spec/active_record/scenarios/shared/permits/role/guest_permit.rb +26 -0
- data/spec/active_record/scenarios/shared/permits/role/super_admin_permit.rb +9 -0
- data/spec/active_record/scenarios/shared/permits/role/user_permit.rb +49 -0
- data/spec/active_record/scenarios/shared/permits/role_group/bloggers_permit.rb +8 -0
- data/spec/active_record/scenarios/shared/permits/role_group/musicians_permit.rb +9 -0
- data/spec/active_record/scenarios/shared/permits/special/any_role_permit.rb +10 -0
- data/spec/active_record/scenarios/shared/permits/special/system_role_permit.rb +10 -0
- data/spec/active_record/scenarios/user_accounts/admin_account_spec.rb +34 -0
- data/spec/active_record/scenarios/user_accounts/config/account_permits.yml +0 -0
- data/spec/active_record/scenarios/user_accounts/docs/USER_ACCOUNTS_SCENARIO.textile +20 -0
- data/spec/active_record/scenarios/user_accounts/docs/basic_rules_spec_possible_samples.txt +84 -0
- data/spec/active_record/scenarios/user_accounts/guest_account_spec.rb +34 -0
- data/spec/active_record/scenarios/user_accounts/helpers.rb +5 -0
- data/spec/active_record/scenarios/user_accounts/helpers/account_setup.rb +41 -0
- data/spec/active_record/scenarios/user_accounts/helpers/user_factory.rb +19 -0
- data/spec/active_record/scenarios/user_accounts/permits/admin_account_permit.rb +28 -0
- data/spec/active_record/scenarios/user_accounts/permits/guest_account_permit.rb +14 -0
- data/spec/active_record/scenarios/user_accounts/permits/user_account_permit.rb +43 -0
- data/spec/active_record/scenarios/user_accounts/user_account_spec.rb +36 -0
- data/spec/active_record/spec_helper.rb +19 -0
- data/spec/cantango/README.textile +3 -0
- data/spec/cantango/ability/cache/compiler_spec.rb +45 -0
- data/spec/cantango/ability/cache/session_cache_spec.rb +11 -0
- data/spec/cantango/ability/cache_spec.rb +107 -0
- data/spec/cantango/ability_filters_spec.rb +128 -0
- data/spec/cantango/ability_spec.rb +74 -0
- data/spec/cantango/api/current_user_accounts.rb +14 -0
- data/spec/cantango/api/current_users.rb +10 -0
- data/spec/cantango/api/user/ability_api_spec.rb +44 -0
- data/spec/cantango/api/user/can_api_spec.rb +109 -0
- data/spec/cantango/api/user/scope_api_spec.rb +65 -0
- data/spec/cantango/api/user_account/ability_api_spec.rb +29 -0
- data/spec/cantango/api/user_account/can_api_spec.rb +82 -0
- data/spec/cantango/api/user_account/scope_api_spec.rb +0 -0
- data/spec/cantango/api/user_account_api_spec.rb +0 -0
- data/spec/cantango/api/user_api_spec.rb +0 -0
- data/spec/cantango/configuration/ability_spec.rb +13 -0
- data/spec/cantango/configuration/autoload_spec.rb +53 -0
- data/spec/cantango/configuration/categories_spec.rb +60 -0
- data/spec/cantango/configuration/engines/cache_spec.rb +19 -0
- data/spec/cantango/configuration/engines/engine_shared.rb +22 -0
- data/spec/cantango/configuration/engines/permission_spec.rb +31 -0
- data/spec/cantango/configuration/engines/permit_spec.rb +16 -0
- data/spec/cantango/configuration/engines/store_engine_shared.rb +16 -0
- data/spec/cantango/configuration/engines/store_shared.rb +36 -0
- data/spec/cantango/configuration/engines_spec.rb +41 -0
- data/spec/cantango/configuration/factory_spec.rb +20 -0
- data/spec/cantango/configuration/guest/find_guest_default_way_spec.rb +33 -0
- data/spec/cantango/configuration/guest_spec.rb +62 -0
- data/spec/cantango/configuration/hash_registry_spec.rb +17 -0
- data/spec/cantango/configuration/registry_spec.rb +17 -0
- data/spec/cantango/configuration/role_groups_spec.rb +15 -0
- data/spec/cantango/configuration/roles_spec.rb +16 -0
- data/spec/cantango/configuration/shared/factory_ex.rb +40 -0
- data/spec/cantango/configuration/shared/hash_registry_ex.rb +65 -0
- data/spec/cantango/configuration/shared/registry_ex.rb +39 -0
- data/spec/cantango/configuration/shared/role_registry_ex.rb +22 -0
- data/spec/cantango/configuration/user_account_spec.rb +26 -0
- data/spec/cantango/configuration/user_spec.rb +46 -0
- data/spec/cantango/configuration_spec.rb +42 -0
- data/spec/cantango/license/save_license_spec.rb +24 -0
- data/spec/cantango/models/items.rb +12 -0
- data/spec/cantango/models/users.rb +13 -0
- data/spec/cantango/moneta_spec.rb +31 -0
- data/spec/cantango/parser/categories_spec.rb +0 -0
- data/spec/cantango/parser/permissions_spec.rb +0 -0
- data/spec/cantango/permission_engine/PERMISSION_STORE.textile +75 -0
- data/spec/cantango/permission_engine/categories_store_spec.rb +10 -0
- data/spec/cantango/permission_engine/compiler_spec.rb +32 -0
- data/spec/cantango/permission_engine/loader/categories_spec.rb +19 -0
- data/spec/cantango/permission_engine/loader/permissions/cantango_permissions_loader.rb +27 -0
- data/spec/cantango/permission_engine/loader/permissions/shared.rb +9 -0
- data/spec/cantango/permission_engine/moneta_store_spec.rb +0 -0
- data/spec/cantango/permission_engine/parser_spec.rb +39 -0
- data/spec/cantango/permission_engine/permission_spec.rb +35 -0
- data/spec/cantango/permission_engine/permission_store_spec.rb +10 -0
- data/spec/cantango/permission_engine/shared_examples.rb +22 -0
- data/spec/cantango/permission_engine/store_spec.rb +8 -0
- data/spec/cantango/permission_engine/user_permission_store_spec.rb +12 -0
- data/spec/cantango/permission_engine/yaml_store_spec.rb +83 -0
- data/spec/cantango/permit_engine/account_permit_spec.rb +47 -0
- data/spec/cantango/permit_engine/builder/role_group_permits_spec.rb +63 -0
- data/spec/cantango/permit_engine/builder/role_permits_spec.rb +58 -0
- data/spec/cantango/permit_engine/builder/special_permits_spec.rb +42 -0
- data/spec/cantango/permit_engine/executor/system_spec.rb +61 -0
- data/spec/cantango/permit_engine/factory_spec.rb +50 -0
- data/spec/cantango/permit_engine/finder_spec.rb +70 -0
- data/spec/cantango/permit_engine/permit/permit_static_and_dynamic_rules_spec.rb +74 -0
- data/spec/cantango/permit_engine/role_group_permit_spec.rb +43 -0
- data/spec/cantango/permit_engine/role_permit_spec.rb +44 -0
- data/spec/cantango/permit_engine/user_permit_spec.rb +41 -0
- data/spec/cantango/rules_spec.rb +55 -0
- data/spec/devise-dummy/Rakefile +7 -0
- data/spec/devise-dummy/app/controllers/accounts_controller.rb +25 -0
- data/spec/devise-dummy/app/controllers/application_controller.rb +3 -0
- data/spec/devise-dummy/app/controllers/articles_controller.rb +48 -0
- data/spec/devise-dummy/app/controllers/comments_controller.rb +40 -0
- data/spec/devise-dummy/app/controllers/concertos_controller.rb +49 -0
- data/spec/devise-dummy/app/controllers/main_controller.rb +8 -0
- data/spec/devise-dummy/app/controllers/posts_controller.rb +49 -0
- data/spec/devise-dummy/app/controllers/users_controller.rb +25 -0
- data/spec/devise-dummy/app/helpers/application_helper.rb +2 -0
- data/spec/devise-dummy/app/models/account_setup.rb +41 -0
- data/spec/devise-dummy/app/models/admin.rb +11 -0
- data/spec/devise-dummy/app/models/article.rb +6 -0
- data/spec/devise-dummy/app/models/comment.rb +5 -0
- data/spec/devise-dummy/app/models/concerto.rb +6 -0
- data/spec/devise-dummy/app/models/guest.rb +34 -0
- data/spec/devise-dummy/app/models/improvisation.rb +2 -0
- data/spec/devise-dummy/app/models/post.rb +5 -0
- data/spec/devise-dummy/app/models/song.rb +3 -0
- data/spec/devise-dummy/app/models/tune.rb +3 -0
- data/spec/devise-dummy/app/models/user.rb +22 -0
- data/spec/devise-dummy/app/permits/accounts/admin/roles/editor_permit.rb +15 -0
- data/spec/devise-dummy/app/permits/licenses/bloggers_license.rb +12 -0
- data/spec/devise-dummy/app/permits/licenses/musicians_license.rb +13 -0
- data/spec/devise-dummy/app/permits/role_groups/editor_permit.rb +13 -0
- data/spec/devise-dummy/app/permits/roles/admin_permit.rb +12 -0
- data/spec/devise-dummy/app/permits/roles/guest_permit.rb +12 -0
- data/spec/devise-dummy/app/permits/roles/user_permit.rb +14 -0
- data/spec/devise-dummy/app/views/articles/admin.html.haml +20 -0
- data/spec/devise-dummy/app/views/articles/admin_account.html.haml +20 -0
- data/spec/devise-dummy/app/views/articles/guest.html.haml +20 -0
- data/spec/devise-dummy/app/views/articles/index.html.haml +23 -0
- data/spec/devise-dummy/app/views/articles/show.html.haml +10 -0
- data/spec/devise-dummy/app/views/comments/guest.html.haml +20 -0
- data/spec/devise-dummy/app/views/comments/index.html.haml +20 -0
- data/spec/devise-dummy/app/views/concertos/admin.html.haml +19 -0
- data/spec/devise-dummy/app/views/concertos/admin_account.html.haml +20 -0
- data/spec/devise-dummy/app/views/concertos/guest.html.haml +20 -0
- data/spec/devise-dummy/app/views/concertos/index.html.haml +19 -0
- data/spec/devise-dummy/app/views/concertos/show.html.haml +10 -0
- data/spec/devise-dummy/app/views/devise/confirmations/new.html.erb +12 -0
- data/spec/devise-dummy/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/spec/devise-dummy/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/spec/devise-dummy/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/spec/devise-dummy/app/views/devise/passwords/edit.html.erb +16 -0
- data/spec/devise-dummy/app/views/devise/passwords/new.html.erb +12 -0
- data/spec/devise-dummy/app/views/devise/registrations/edit.html.erb +25 -0
- data/spec/devise-dummy/app/views/devise/registrations/new.html.erb +18 -0
- data/spec/devise-dummy/app/views/devise/sessions/new.html.erb +17 -0
- data/spec/devise-dummy/app/views/devise/shared/_links.erb +25 -0
- data/spec/devise-dummy/app/views/devise/unlocks/new.html.erb +12 -0
- data/spec/devise-dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/devise-dummy/app/views/main/index.html.haml +1 -0
- data/spec/devise-dummy/app/views/posts/admin.html.haml +20 -0
- data/spec/devise-dummy/app/views/posts/admin_account.html.haml +20 -0
- data/spec/devise-dummy/app/views/posts/guest.html.haml +20 -0
- data/spec/devise-dummy/app/views/posts/index.html.haml +19 -0
- data/spec/devise-dummy/app/views/posts/show.html.haml +11 -0
- data/spec/devise-dummy/app/views/users/admin.html.haml +19 -0
- data/spec/devise-dummy/app/views/users/admin_account.html.haml +19 -0
- data/spec/devise-dummy/app/views/users/guest.html.haml +19 -0
- data/spec/devise-dummy/app/views/users/index.html.haml +19 -0
- data/spec/devise-dummy/app/views/users/show.html.haml +11 -0
- data/spec/devise-dummy/config.ru +4 -0
- data/spec/devise-dummy/config/application.rb +46 -0
- data/spec/devise-dummy/config/boot.rb +10 -0
- data/spec/devise-dummy/config/cantango_permissions.yml +50 -0
- data/spec/devise-dummy/config/categories.yml +10 -0
- data/spec/devise-dummy/config/database.yml +22 -0
- data/spec/devise-dummy/config/environment.rb +5 -0
- data/spec/devise-dummy/config/environments/development.rb +26 -0
- data/spec/devise-dummy/config/environments/production.rb +49 -0
- data/spec/devise-dummy/config/environments/test.rb +35 -0
- data/spec/devise-dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/devise-dummy/config/initializers/cantango.rb +8 -0
- data/spec/devise-dummy/config/initializers/devise.rb +204 -0
- data/spec/devise-dummy/config/initializers/inflections.rb +10 -0
- data/spec/devise-dummy/config/initializers/mime_types.rb +5 -0
- data/spec/devise-dummy/config/initializers/secret_token.rb +7 -0
- data/spec/devise-dummy/config/initializers/session_store.rb +8 -0
- data/spec/devise-dummy/config/initializers/simple_roles.rb +42 -0
- data/spec/devise-dummy/config/locales/devise.en.yml +53 -0
- data/spec/devise-dummy/config/locales/en.yml +5 -0
- data/spec/devise-dummy/config/routes.rb +88 -0
- data/spec/devise-dummy/db/migrate/002_create_comment.rb +13 -0
- data/spec/devise-dummy/db/migrate/003_create_post.rb +14 -0
- data/spec/devise-dummy/db/migrate/004_create_article.rb +14 -0
- data/spec/devise-dummy/db/migrate/005_create_account.rb +13 -0
- data/spec/devise-dummy/db/migrate/006_create_concerto.rb +14 -0
- data/spec/devise-dummy/db/migrate/007_devise_create_users.rb +31 -0
- data/spec/devise-dummy/db/schema.rb +75 -0
- data/spec/devise-dummy/db/seeds.rb +5 -0
- data/spec/devise-dummy/db/users.txt +7 -0
- data/spec/devise-dummy/public/404.html +26 -0
- data/spec/devise-dummy/public/422.html +26 -0
- data/spec/devise-dummy/public/500.html +26 -0
- data/spec/devise-dummy/public/favicon.ico +0 -0
- data/spec/devise-dummy/public/javascripts/application.js +2 -0
- data/spec/devise-dummy/public/javascripts/controls.js +965 -0
- data/spec/devise-dummy/public/javascripts/dragdrop.js +974 -0
- data/spec/devise-dummy/public/javascripts/effects.js +1123 -0
- data/spec/devise-dummy/public/javascripts/prototype.js +6001 -0
- data/spec/devise-dummy/public/javascripts/rails.js +191 -0
- data/spec/devise-dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/devise-dummy/script/rails +6 -0
- data/spec/devise-dummy_spec_helper.rb +41 -0
- data/spec/devise-integration/concerto_spec.rb +80 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/accounts_controller.rb +23 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/articles_controller.rb +55 -0
- data/spec/dummy/app/controllers/comments_controller.rb +38 -0
- data/spec/dummy/app/controllers/concertos_controller.rb +43 -0
- data/spec/dummy/app/controllers/main_controller.rb +8 -0
- data/spec/dummy/app/controllers/posts_controller.rb +47 -0
- data/spec/dummy/app/controllers/sessions_controller.rb +16 -0
- data/spec/dummy/app/controllers/users_controller.rb +23 -0
- data/spec/dummy/app/helpers/application_helper.rb +37 -0
- data/spec/dummy/app/models/account_setup.rb +41 -0
- data/spec/dummy/app/models/admin.rb +4 -0
- data/spec/dummy/app/models/article.rb +6 -0
- data/spec/dummy/app/models/comment.rb +5 -0
- data/spec/dummy/app/models/concerto.rb +6 -0
- data/spec/dummy/app/models/guest.rb +27 -0
- data/spec/dummy/app/models/improvisation.rb +2 -0
- data/spec/dummy/app/models/post.rb +5 -0
- data/spec/dummy/app/models/song.rb +3 -0
- data/spec/dummy/app/models/tune.rb +3 -0
- data/spec/dummy/app/models/user.rb +12 -0
- data/spec/dummy/app/permits/accounts/admin/roles/editor_permit.rb +15 -0
- data/spec/dummy/app/permits/licenses/bloggers_license.rb +12 -0
- data/spec/dummy/app/permits/licenses/musicians_license.rb +13 -0
- data/spec/dummy/app/permits/role_groups/editor_permit.rb +13 -0
- data/spec/dummy/app/permits/roles/admin_permit.rb +12 -0
- data/spec/dummy/app/permits/roles/guest_permit.rb +12 -0
- data/spec/dummy/app/permits/roles/user_permit.rb +18 -0
- data/spec/dummy/app/views/articles/admin.html.haml +20 -0
- data/spec/dummy/app/views/articles/admin_account.html.haml +20 -0
- data/spec/dummy/app/views/articles/guest.html.haml +20 -0
- data/spec/dummy/app/views/articles/index.html.haml +23 -0
- data/spec/dummy/app/views/articles/show.html.haml +10 -0
- data/spec/dummy/app/views/comments/guest.html.haml +20 -0
- data/spec/dummy/app/views/comments/index.html.haml +20 -0
- data/spec/dummy/app/views/concertos/admin.html.haml +20 -0
- data/spec/dummy/app/views/concertos/admin_account.html.haml +20 -0
- data/spec/dummy/app/views/concertos/guest.html.haml +20 -0
- data/spec/dummy/app/views/concertos/index.html.haml +19 -0
- data/spec/dummy/app/views/concertos/show.html.haml +10 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/main/index.html.haml +1 -0
- data/spec/dummy/app/views/posts/admin.html.haml +20 -0
- data/spec/dummy/app/views/posts/admin_account.html.haml +20 -0
- data/spec/dummy/app/views/posts/guest.html.haml +20 -0
- data/spec/dummy/app/views/posts/index.html.haml +19 -0
- data/spec/dummy/app/views/posts/show.html.haml +11 -0
- data/spec/dummy/app/views/users/admin.html.haml +19 -0
- data/spec/dummy/app/views/users/admin_account.html.haml +19 -0
- data/spec/dummy/app/views/users/guest.html.haml +19 -0
- data/spec/dummy/app/views/users/index.html.haml +19 -0
- data/spec/dummy/app/views/users/show.html.haml +11 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +43 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/cantango_permissions.yml +50 -0
- data/spec/dummy/config/categories.yml +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +26 -0
- data/spec/dummy/config/environments/production.rb +49 -0
- data/spec/dummy/config/environments/test.rb +35 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cantango.rb +5 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/simple_roles.rb +44 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +84 -0
- data/spec/dummy/db/migrate/001_create_user.rb +16 -0
- data/spec/dummy/db/migrate/002_create_comment.rb +13 -0
- data/spec/dummy/db/migrate/003_create_post.rb +14 -0
- data/spec/dummy/db/migrate/004_create_article.rb +14 -0
- data/spec/dummy/db/migrate/005_create_account.rb +13 -0
- data/spec/dummy/db/migrate/006_create_concerto.rb +14 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/application.js +2 -0
- data/spec/dummy/public/javascripts/controls.js +965 -0
- data/spec/dummy/public/javascripts/dragdrop.js +974 -0
- data/spec/dummy/public/javascripts/effects.js +1123 -0
- data/spec/dummy/public/javascripts/prototype.js +6001 -0
- data/spec/dummy/public/javascripts/rails.js +191 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/tmp/pids/server.pid +1 -0
- data/spec/dummy_spec_helper.rb +43 -0
- data/spec/entire_suite_spec.rb +15 -0
- data/spec/factories.rb +8 -0
- data/spec/fixtures/config/cantango_permissions.yml +48 -0
- data/spec/fixtures/config/categories.yml +6 -0
- data/spec/fixtures/config/evaluator_fixtures.yml +18 -0
- data/spec/fixtures/config/licenses.yml +4 -0
- data/spec/fixtures/config/permissions.yml +19 -0
- data/spec/fixtures/config/role_group.yml +4 -0
- data/spec/fixtures/config/roles.yml +4 -0
- data/spec/fixtures/config/user_permissions.yml +8 -0
- data/spec/fixtures/models.rb +2 -0
- data/spec/fixtures/models/items.rb +8 -0
- data/spec/fixtures/models/simple_roles.rb +44 -0
- data/spec/fixtures/models/user.rb +22 -0
- data/spec/fixtures/models/user_account.rb +21 -0
- data/spec/fixtures/tango_fixtures.rb +29 -0
- data/spec/generators/cantango/account_role_permit_generator_spec.rb +35 -0
- data/spec/generators/cantango/account_role_permits_generator_spec.rb +59 -0
- data/spec/generators/cantango/license_generator_spec.rb +33 -0
- data/spec/generators/cantango/licenses_generator_spec.rb +58 -0
- data/spec/generators/cantango/role_permit_generator_spec.rb +35 -0
- data/spec/generators/cantango/role_permits_generator_spec.rb +58 -0
- data/spec/helpers/dummy_app_ability.rb +26 -0
- data/spec/integration/Design_notes.textile +30 -0
- data/spec/integration/admin_user/masquerade_spec.rb +22 -0
- data/spec/integration/cache_using_moneta_spec.rb +46 -0
- data/spec/integration/cache_using_session_spec.rb +46 -0
- data/spec/integration/main_spec.rb +16 -0
- data/spec/integration/performance/ability_initialize_performance.rb +54 -0
- data/spec/integration/performance/cache_performance.rb +31 -0
- data/spec/integration/performance/can_performance.rb +54 -0
- data/spec/integration/performance/helpers/ability.rb +44 -0
- data/spec/integration/performance/helpers/ability_api.rb +44 -0
- data/spec/integration/performance/helpers/ability_raw.rb +8 -0
- data/spec/integration/performance/helpers/cache.rb +37 -0
- data/spec/integration/performance/helpers/rules.rb +12 -0
- data/spec/integration/performance/integral_performance_caching_disabled.rb +33 -0
- data/spec/integration/performance/integral_performance_caching_enabled.rb +33 -0
- data/spec/integration/performance/raw_performance.rb +11 -0
- data/spec/integration/user/articles_spec.rb +39 -0
- data/spec/integration/user/concerto_spec.rb +39 -0
- data/spec/note_on_caching_and_dynamic.textile +114 -0
- data/spec/path_helper.rb +9 -0
- data/spec/simple_roles.rb +46 -0
- data/spec/spec_helper.rb +22 -0
- data/wiki/ability/initialize.markdown +45 -0
- data/wiki/api/user/api.markdown +88 -0
- data/wiki/api/user_account/api.markdown +88 -0
- data/wiki/config/ability.markdown +18 -0
- data/wiki/config/autoload.markdown +31 -0
- data/wiki/config/guest.markdown +49 -0
- data/wiki/config/models_registration.markdown +16 -0
- data/wiki/config/role_groups.markdown +1 -0
- data/wiki/config/roles.markdown +1 -0
- data/wiki/engines/cache/config.markdown +31 -0
- data/wiki/engines/cache/session_store.markdown +0 -0
- data/wiki/engines/cache/store.markdown +6 -0
- data/wiki/engines/permissions/categories.markdown +33 -0
- data/wiki/engines/permissions/config.markdown +60 -0
- data/wiki/engines/permissions/moneta_store.markdown +0 -0
- data/wiki/engines/permissions/store.markdown +0 -0
- data/wiki/engines/permissions/yaml_store.markdown +0 -0
- data/wiki/engines/permits/config.markdown +0 -0
- data/wiki/engines/permits/licenses.markdown +0 -0
- data/wiki/engines/permits/role_groups.markdown +0 -0
- data/wiki/engines/permits/roles.markdown +0 -0
- data/wiki/engines/permits/user_accounts.markdown +0 -0
- data/wiki/feature_list.markdown +39 -0
- data/wiki/rules_caching.markdown +17 -0
- data/wiki/users/masquerading.markdown +29 -0
- data/wiki/when_to_use.markdown +64 -0
- data/wiki/why_to_use.markdown +11 -0
- metadata +788 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
require 'sugar-high/array'
|
|
3
|
+
require 'active_support/inflector'
|
|
4
|
+
require 'rails_artifactor'
|
|
5
|
+
|
|
6
|
+
module CanTango
|
|
7
|
+
module Generators
|
|
8
|
+
class LicensesGenerator < Rails::Generators::Base
|
|
9
|
+
desc "Creates Licenses for use with CanCan Permits"
|
|
10
|
+
|
|
11
|
+
argument :licenses, :type => :array, :default => [], :desc => "Licenses"
|
|
12
|
+
|
|
13
|
+
source_root File.dirname(__FILE__) + '/../license/templates'
|
|
14
|
+
|
|
15
|
+
def main_flow
|
|
16
|
+
licenses.each do |license|
|
|
17
|
+
template_license(license)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
attr_accessor :license_name
|
|
24
|
+
|
|
25
|
+
def template_license name
|
|
26
|
+
self.license_name = name
|
|
27
|
+
template "license.erb", "app/licenses/#{name}_license.rb"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module CanTango
|
|
2
|
+
module Generators
|
|
3
|
+
module PermitGenerator
|
|
4
|
+
|
|
5
|
+
def template_permit role, account = nil
|
|
6
|
+
template_account_permit role, account if account
|
|
7
|
+
template permit_source, "app/permits/#{permit_target(role)}" unless account
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def template_account_permit role, account
|
|
11
|
+
template "account_permit.erb" , "app/permits/#{account}_permits/#{permit_target(role)}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load_permit_template name
|
|
15
|
+
template = ERB.new File.open(template_filepath).read
|
|
16
|
+
template.result(binding)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def template_filepath
|
|
20
|
+
File.join source_path, permit_source
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def source_path
|
|
24
|
+
source_paths.first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def permit_source
|
|
28
|
+
group? ? "role_group_permit.erb" : "role_permit.erb"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def permit_target role
|
|
32
|
+
group? ? "#{role}_group_permit.rb" : "#{role}_permit.rb"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
require 'sugar-high/array'
|
|
3
|
+
require 'active_support/inflector'
|
|
4
|
+
require 'rails_artifactor'
|
|
5
|
+
# require 'logging_assist'
|
|
6
|
+
#
|
|
7
|
+
require 'generators/cantango/base'
|
|
8
|
+
require 'generators/cantango/license_base'
|
|
9
|
+
require 'generators/cantango/permit_generator'
|
|
10
|
+
|
|
11
|
+
module CanTango
|
|
12
|
+
module Generators
|
|
13
|
+
class RolePermitGenerator < CanTango::Generators::Base
|
|
14
|
+
desc "Creates a Permit for a role in 'app/permits' with specific permissions and/or licenses"
|
|
15
|
+
|
|
16
|
+
argument :role, :type => :string, :default => '', :desc => "Role to create permit for"
|
|
17
|
+
|
|
18
|
+
class_option :licenses, :type => :array, :default => [], :desc => "Licenses to use in Permit"
|
|
19
|
+
|
|
20
|
+
class_option :account, :type => :string,
|
|
21
|
+
:desc => "Generate permits for a specific user account"
|
|
22
|
+
|
|
23
|
+
class_option :group, :type => :boolean, :default => false, :desc => "Generate permit for a role group"
|
|
24
|
+
|
|
25
|
+
source_root File.dirname(__FILE__) + '/templates'
|
|
26
|
+
|
|
27
|
+
def main_flow
|
|
28
|
+
return if role.empty?
|
|
29
|
+
template_permit role
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
protected
|
|
33
|
+
|
|
34
|
+
include CanTango::Generators::Base
|
|
35
|
+
include CanTango::Generators::LicenceBase
|
|
36
|
+
|
|
37
|
+
def group?
|
|
38
|
+
options[:group]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class <%= role_group.to_s.camelize %>RoleGroupPermit < CanTango::PermitEngine::RoleGroupPermit
|
|
2
|
+
def initialize ability
|
|
3
|
+
super
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
protected
|
|
7
|
+
|
|
8
|
+
def permit_rules
|
|
9
|
+
# insert your can, cannot and any other rule statements here
|
|
10
|
+
<%= permit_logic.strip %>
|
|
11
|
+
<%= license_logic %>
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class <%= role.to_s.camelize %>RolePermit < CanTango::PermitEngine::RolePermit
|
|
2
|
+
def initialize ability
|
|
3
|
+
super
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
protected
|
|
7
|
+
|
|
8
|
+
def permit_rules
|
|
9
|
+
# insert your can, cannot and any other rule statements here
|
|
10
|
+
<%= permit_logic.strip %>
|
|
11
|
+
<%= license_logic %>
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
require 'sugar-high/array'
|
|
3
|
+
require 'active_support/inflector'
|
|
4
|
+
require 'rails_artifactor'
|
|
5
|
+
# require 'logging_assist'
|
|
6
|
+
|
|
7
|
+
module CanTango
|
|
8
|
+
module Generators
|
|
9
|
+
class PermitsGenerator < Rails::Generators::Base
|
|
10
|
+
desc "Creates a Permit for each role in 'app/permits' and ensures that the permit folder is added to Rails load path."
|
|
11
|
+
|
|
12
|
+
argument :roles, :type => :array, :default => [],
|
|
13
|
+
:desc => "Roles to create permits for"
|
|
14
|
+
|
|
15
|
+
# ORM to use
|
|
16
|
+
class_option :orm, :type => :string, :default => 'active_record',
|
|
17
|
+
:desc => "ORM to use"
|
|
18
|
+
|
|
19
|
+
class_option :initializer, :type => :boolean, :default => true,
|
|
20
|
+
:desc => "Create Permits initializer"
|
|
21
|
+
|
|
22
|
+
class_option :default_permits, :type => :boolean, :default => true,
|
|
23
|
+
:desc => "Create default permits for guest and admin roles"
|
|
24
|
+
|
|
25
|
+
class_option :account, :type => :string,
|
|
26
|
+
:desc => "Generate permits for a specific user account"
|
|
27
|
+
|
|
28
|
+
class_option :group, :type => :boolean, :default => false,
|
|
29
|
+
:desc => "Generate permits for role groups"
|
|
30
|
+
|
|
31
|
+
source_root File.dirname(__FILE__) + '/../role_permit/templates'
|
|
32
|
+
|
|
33
|
+
def main_flow
|
|
34
|
+
default_roles.each do |role|
|
|
35
|
+
template_permit role
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
template_permit :any
|
|
39
|
+
template_permit :system
|
|
40
|
+
|
|
41
|
+
permit_logic = base_logic
|
|
42
|
+
get_roles.each do |role|
|
|
43
|
+
template_permit(role) if !skip_permit?(role)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
permits_initializer if permits_initializer?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
include PermitGenerator
|
|
52
|
+
|
|
53
|
+
extend RailsAssist::UseMacro
|
|
54
|
+
|
|
55
|
+
use_helpers :app, :file, :special
|
|
56
|
+
|
|
57
|
+
attr_accessor :permit_name, :permit_logic
|
|
58
|
+
|
|
59
|
+
def default_roles
|
|
60
|
+
[:guest, :admin]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def permits_initializer?
|
|
64
|
+
options[:initializer]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def skip_permit? permit
|
|
68
|
+
default_permits? && default_roles.include?(permit.to_sym)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# TODO: merge with any registered roles in application
|
|
73
|
+
def get_roles
|
|
74
|
+
roles.uniq.to_symbols
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def default_permits?
|
|
78
|
+
options[:default_permits]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def orm
|
|
82
|
+
options[:orm]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def permits_initializer
|
|
86
|
+
create_initializer :permits do
|
|
87
|
+
%Q{CanTango.configure do |config|
|
|
88
|
+
config.orm = :#{orm}
|
|
89
|
+
end
|
|
90
|
+
}
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def template_permit role, template_name=nil
|
|
95
|
+
if permit_roles.include?(role)
|
|
96
|
+
meth = "#{role}_logic"
|
|
97
|
+
self.permit_logic = respond_to?(meth) ? send(meth) : base_logic
|
|
98
|
+
end
|
|
99
|
+
self.permit_name = role
|
|
100
|
+
template_permit role
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
def permit_roles
|
|
106
|
+
[:admin, :guest, :any, :system]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def base_logic
|
|
110
|
+
%{
|
|
111
|
+
}
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def admin_logic
|
|
115
|
+
%{
|
|
116
|
+
can :manage, :all
|
|
117
|
+
}
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def guest_logic
|
|
121
|
+
%{
|
|
122
|
+
can :read, :all
|
|
123
|
+
}
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
h1. Note on licenses.
|
|
2
|
+
|
|
3
|
+
First, your design "note":https://github.com/kristianmandrup/tango/blob/permission_store/spec/tango/permission/PERMISSION_STORE.textile :
|
|
4
|
+
|
|
5
|
+
"Note that licenses are just named subsets of rules and can thus be reused for both roles and role_groups."
|
|
6
|
+
|
|
7
|
+
<pre>
|
|
8
|
+
class AdminPermit
|
|
9
|
+
|
|
10
|
+
def set_permission_rules
|
|
11
|
+
licenses :bloggers, :admins
|
|
12
|
+
can :manage, User
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
</pre>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
<pre>
|
|
20
|
+
class BloggersLicense
|
|
21
|
+
def enforce!
|
|
22
|
+
can :manage, [Article, Post]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
</pre>
|
|
26
|
+
|
|
27
|
+
maybe rename method to use the same convention. Maybe the method name _enforce!_ is better? or _enforce_rules!_ perhaps?
|
|
28
|
+
|
|
29
|
+
User permissions:
|
|
30
|
+
|
|
31
|
+
<pre>
|
|
32
|
+
users:
|
|
33
|
+
kmandrup:
|
|
34
|
+
can:
|
|
35
|
+
manage: [Article, Pot]
|
|
36
|
+
cannot
|
|
37
|
+
read: [Secret]
|
|
38
|
+
stanislaw
|
|
39
|
+
can:
|
|
40
|
+
manage: all
|
|
41
|
+
</pre>
|
|
42
|
+
|
|
43
|
+
Rules for individual Users. They key needs to be a unique identifier for each user, either email or username.
|
|
44
|
+
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
h1. Refactoring into engines
|
|
2
|
+
|
|
3
|
+
Thinking about how to build permissions factory & collection & evaluation stack I realized that some mediator level beetween Ability and Permission is needed:
|
|
4
|
+
|
|
5
|
+
1) Many classes in permissions folder were really not on the same logical level as permission: fx YamlStore, Factory, Evaluator and some others - they shared not the logical level of permission but some level before/above? it and thus I thought to take a risk creating such level. ;)
|
|
6
|
+
|
|
7
|
+
2) Obviously, it should be a possibility there (already done!) to turn off permits or/and permissions evaluation. This was the second reason - it is about logical levels management again - consider these nice "if permit_engine_on? and if permission_engine_on?" allowing to turn off one or both of the engines.
|
|
8
|
+
Doing fx CanTango.permit_engine_on = false - you disable the whole engine level, not the level of permission itself! (see lib/tango/ability.rb)
|
|
9
|
+
|
|
10
|
+
3) Structure of lib/tango folder before switching to refactor_into_engines branch:
|
|
11
|
+
|
|
12
|
+
<pre>
|
|
13
|
+
stanislaw stanislaw 80 Jul 16 15:34 ability
|
|
14
|
+
stanislaw stanislaw 2283 Jul 18 21:47 ability.rb
|
|
15
|
+
stanislaw stanislaw 80 Jul 18 21:47 configuration
|
|
16
|
+
stanislaw stanislaw 1503 Jul 18 21:47 configuration.rb
|
|
17
|
+
stanislaw stanislaw 128 Jul 16 21:19 license
|
|
18
|
+
stanislaw stanislaw 83 Jul 13 19:21 license.rb
|
|
19
|
+
stanislaw stanislaw 136 Jul 18 21:47 loader
|
|
20
|
+
stanislaw stanislaw 93 Jul 18 21:47 loader.rb
|
|
21
|
+
stanislaw stanislaw 153 Jul 13 19:21 macros.rb
|
|
22
|
+
stanislaw stanislaw 304 Jul 13 19:22 masquerade.rb
|
|
23
|
+
stanislaw stanislaw 112 Jul 18 21:47 parser
|
|
24
|
+
stanislaw stanislaw 85 Jul 13 19:21 parser.rb
|
|
25
|
+
stanislaw stanislaw 352 Jul 18 21:47 permission
|
|
26
|
+
stanislaw stanislaw 88 Jul 18 21:47 permission_engine
|
|
27
|
+
stanislaw stanislaw 918 Jul 18 21:47 permission.rb
|
|
28
|
+
stanislaw stanislaw 392 Jul 18 21:47 permit
|
|
29
|
+
stanislaw stanislaw 181 Jul 18 21:47 permit.rb
|
|
30
|
+
stanislaw stanislaw 112 Jul 18 21:47 role_group_permit
|
|
31
|
+
stanislaw stanislaw 1014 Jul 18 21:47 role_group_permit.rb
|
|
32
|
+
stanislaw stanislaw 112 Jul 18 21:47 role_permit
|
|
33
|
+
stanislaw stanislaw 989 Jul 18 21:47 role_permit.rb
|
|
34
|
+
stanislaw stanislaw 136 Jul 16 20:49 rspec
|
|
35
|
+
stanislaw stanislaw 28 Jul 13 19:21 rspec.rb
|
|
36
|
+
stanislaw stanislaw 179 Jul 18 21:47 rule_class.rb
|
|
37
|
+
stanislaw stanislaw 128 Jul 18 21:47 rules
|
|
38
|
+
stanislaw stanislaw 730 Jul 18 21:47 rules.rb
|
|
39
|
+
stanislaw stanislaw 389 Jul 13 19:22 user_account.rb
|
|
40
|
+
stanislaw stanislaw 468 Jul 13 19:22 user.rb
|
|
41
|
+
</pre>
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
Consider present structure of lib/tango folder:
|
|
45
|
+
|
|
46
|
+
<pre>
|
|
47
|
+
stanislaw stanislaw 80 Jul 16 15:34 ability
|
|
48
|
+
stanislaw stanislaw 2435 Jul 18 09:07 ability.rb
|
|
49
|
+
stanislaw stanislaw 80 Jul 18 04:43 configuration
|
|
50
|
+
stanislaw stanislaw 1509 Jul 18 08:46 configuration.rb
|
|
51
|
+
stanislaw stanislaw 128 Jul 16 21:19 license
|
|
52
|
+
stanislaw stanislaw 83 Jul 13 19:21 license.rb
|
|
53
|
+
stanislaw stanislaw 153 Jul 13 19:21 macros.rb
|
|
54
|
+
stanislaw stanislaw 304 Jul 13 19:22 masquerade.rb
|
|
55
|
+
stanislaw stanislaw 112 Jul 18 05:00 parser
|
|
56
|
+
stanislaw stanislaw 85 Jul 13 19:21 parser.rb
|
|
57
|
+
stanislaw stanislaw 480 Jul 18 08:34 permission_engine
|
|
58
|
+
stanislaw stanislaw 193 Jul 17 01:46 permission_engine.rb
|
|
59
|
+
stanislaw stanislaw 544 Jul 17 08:07 permit_engine
|
|
60
|
+
stanislaw stanislaw 242 Jul 17 02:36 permit_engine.rb
|
|
61
|
+
stanislaw stanislaw 136 Jul 16 20:49 rspec
|
|
62
|
+
stanislaw stanislaw 28 Jul 13 19:21 rspec.rb
|
|
63
|
+
stanislaw stanislaw 160 Jul 18 07:58 rules
|
|
64
|
+
stanislaw stanislaw 749 Jul 18 08:23 rules.rb
|
|
65
|
+
stanislaw stanislaw 389 Jul 13 19:22 user_account.rb
|
|
66
|
+
stanislaw stanislaw 468 Jul 13 19:22 user.rb
|
|
67
|
+
</pre>
|
|
68
|
+
|
|
69
|
+
license* here should be deprecated or removed - they are not used anymore!
|
|
70
|
+
parser* should be moved into PermissionEngine too because of it is dealing only with permissions & categories. I hadn't enough time to do that.
|
|
71
|
+
|
|
72
|
+
The resulting structure will be like that:
|
|
73
|
+
|
|
74
|
+
<pre>
|
|
75
|
+
stanislaw stanislaw 80 Jul 16 15:34 ability
|
|
76
|
+
stanislaw stanislaw 2435 Jul 18 09:07 ability.rb
|
|
77
|
+
stanislaw stanislaw 80 Jul 18 04:43 configuration
|
|
78
|
+
stanislaw stanislaw 1509 Jul 18 08:46 configuration.rb
|
|
79
|
+
stanislaw stanislaw 153 Jul 13 19:21 macros.rb
|
|
80
|
+
stanislaw stanislaw 304 Jul 13 19:22 masquerade.rb
|
|
81
|
+
stanislaw stanislaw 480 Jul 18 08:34 permission_engine
|
|
82
|
+
stanislaw stanislaw 193 Jul 17 01:46 permission_engine.rb
|
|
83
|
+
stanislaw stanislaw 544 Jul 17 08:07 permit_engine
|
|
84
|
+
stanislaw stanislaw 242 Jul 17 02:36 permit_engine.rb
|
|
85
|
+
stanislaw stanislaw 136 Jul 16 20:49 rspec
|
|
86
|
+
stanislaw stanislaw 28 Jul 13 19:21 rspec.rb
|
|
87
|
+
stanislaw stanislaw 160 Jul 18 07:58 rules
|
|
88
|
+
stanislaw stanislaw 749 Jul 18 08:23 rules.rb
|
|
89
|
+
stanislaw stanislaw 389 Jul 13 19:22 user_account.rb
|
|
90
|
+
stanislaw stanislaw 468 Jul 13 19:22 user.rb
|
|
91
|
+
</pre>
|
|
92
|
+
|
|
93
|
+
This way we have very clean main logical level. Then we can move user, user_account, masquerade and may be macros to some level like "Users" :
|
|
94
|
+
|
|
95
|
+
<pre>
|
|
96
|
+
stanislaw stanislaw 80 Jul 16 15:34 ability
|
|
97
|
+
stanislaw stanislaw 2435 Jul 18 09:07 ability.rb
|
|
98
|
+
stanislaw stanislaw 80 Jul 18 04:43 configuration
|
|
99
|
+
stanislaw stanislaw 1509 Jul 18 08:46 configuration.rb
|
|
100
|
+
stanislaw stanislaw 480 Jul 18 08:34 permission_engine
|
|
101
|
+
stanislaw stanislaw 193 Jul 17 01:46 permission_engine.rb
|
|
102
|
+
stanislaw stanislaw 544 Jul 17 08:07 permit_engine
|
|
103
|
+
stanislaw stanislaw 242 Jul 17 02:36 permit_engine.rb
|
|
104
|
+
stanislaw stanislaw 136 Jul 16 20:49 rspec
|
|
105
|
+
stanislaw stanislaw 28 Jul 13 19:21 rspec.rb
|
|
106
|
+
stanislaw stanislaw 160 Jul 18 07:58 rules
|
|
107
|
+
stanislaw stanislaw 749 Jul 18 08:23 rules.rb
|
|
108
|
+
stanislaw stanislaw 389 Jul 13 19:22 users
|
|
109
|
+
stanislaw stanislaw 468 Jul 13 19:22 users.rb
|
|
110
|
+
</pre>
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
The structure will then impress me the way like I had when I first saw precise devise structure.
|
|
114
|
+
I think it is really makes sense!!!
|
|
115
|
+
|