Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shouya/cant_cant_cant
Role-based authentication on controller actions, centrally configured
https://github.com/shouya/cant_cant_cant
authentication permissions rails rubygems
Last synced: 26 days ago
JSON representation
Role-based authentication on controller actions, centrally configured
- Host: GitHub
- URL: https://github.com/shouya/cant_cant_cant
- Owner: shouya
- License: mit
- Created: 2016-09-27T10:22:15.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-06T07:59:48.000Z (almost 8 years ago)
- Last Synced: 2024-12-12T17:50:18.256Z (27 days ago)
- Topics: authentication, permissions, rails, rubygems
- Language: Ruby
- Homepage:
- Size: 75.2 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CantCantCant
[![Build Status](https://travis-ci.org/shouya/cant_cant_cant.svg?branch=master)](https://travis-ci.org/shouya/cant_cant_cant)
[![Gem Version](https://badge.fury.io/rb/cant_cant_cant.svg)](https://rubygems.org/gems/cant_cant_cant)
[![Ruby Doc](https://img.shields.io/badge/rubydoc-lastest-brightgreen.svg)](http://www.rubydoc.info/gems/cant_cant_cant)I want an authentication library to:
- be light weight and simple, working in a controllable way;
- be role based, where roles and users are multiple-to-multiple relation;
- apply on controller actions;
- have access control in a single configuration file;
- be able to export a list of permissions for rolesSo CanCan[Can] just can't satisfy my requirement. And then CantCantCant is the wheel invented for above purposes.
## Installation
Add the following line to your `Gemfile` and execute `bundle`.
gem 'cant_cant_cant'
Then run:
$ rails generate cant_cant_cant:install
to generate the config and the initializer.
To get authentication works, you have to adjust `config/cant_cant_cant.yml` for your own need.
After all you need to tell CantCantCant how to acquire your current role(s). Modify the code in `config/initializers/cant_cant_cant.rb`.
CantCantCant will raise an exception on unauthorized access. In order to handle the error yourself, take a look on the related code in `config/initializers/cant_cant_cant.rb`.
## Usage
You're done. There is no need to configure more in any of your controllers.
Note that live reloading is not supported yet; it means you'll need to restart your server after modifying your actions/controllers/config to take effect. Live reloading can be enabled by setting `config.caching = false` to force CantCantCant load your permission file without caching them.
If you need to acquire a list of actions that given roles have access to, just call `CantCantCant.allowed_actions_for(roles)`.
## Configuration
The configuration is located in `config/cant_cant_cant.yml`. The path to configuration file can be modified in the initializer.
The configuration is a YAML document that looks like:
```yaml
user: &default_permissions
test#public: allow
test#admin_only: deny
test#no_access: denyadmin:
<<: *default_permissions
test#admin_only: allow
```## Initializer
You can adjust the initializer as you want, the only thing to notice is that you need to call `CantCantCant.initialize` before making any request, otherwise the authentication won't take effect.
CantCantCant need a `current_roles` method, you should implement it by your own according to the template, either in the initializer or in your own `ApplicationController`. You can also handle the `PermissionDenied` exception in the same way.
Using `rails generate cant_cant_cant:install`, the template will be generated for you in the initializer.
```ruby
class ActionController::Base
# Write your own handler
rescue_from CantCantCant::PermissionDenied do
render plain: 'permission denied', status: 403
end# Write your own method to return the roles for current user
def current_roles
return [] unless defined? current_user
return [] if current_user.empty?current_user.roles
end
end
```## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).