RoleMaking
Used for role-based resource management, based on the gem cancancan, like the ability.rb,you need define resource in resource.rb
Installation
Add this line to your application's Gemfile:
gem 'role_making'
And then execute:
$ bundle
Or install it yourself as:
$ gem install role_making
Usage
rails generate role_making NAME [ROLE_CNAME] [options]
for user ability you can add following in cancancan ability.rb:
user ||= User.new
if user.has_role?(:admin)
can :manager,:all
end
Role.all_without_reserved.each do |role|
next unless user.has_role?(role.name)
role.role_resources.each do |role_resource|
resource = Resource.find_by_name(role_resource.resource_name)
if resource[:behavior]
block = resource[:behavior]
can resource[:verb],resource[:object] do |object|
block.call(user,object)
end
else
can resource[:verb],resource[:object]
end
end
end
Example:
rails generate role_making user
or
rails generate role_making user Role
This will create:
db/migrate/201506250001_role_making_create_roles.rb
db/migrate/201506250002_role_making_create_role_resources.rb
app/models/role.rb
app/models/role_resource.rb
add "role_making" to user.rb
Define resource
#with block condition
group :kefu do
resource [:read,:update,:destroy], Post do |user,post|
admin != user
end
resource :create,User
end
#with hash condition
group :kefu do
resource :edit, Post , type: 3
end
#if the condition need eval,you can do like this
group :kefu do
resource :edit, Post , con: {user_id: 'user.id'}
end
#with customize resource name
group :kefu do
resource :edit, Post , res_name: 'Edit Post'
end
## Contributing
1. Fork it ( https://github.com/javyliu/role_making/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request