-
Notifications
You must be signed in to change notification settings - Fork 405
Usage
-
To define a global role:
user = User.find(1) user.add_role :admin
-
To define a role scoped to a resource instance
user = User.find(2) user.add_role :moderator, Forum.first
-
To define a role scoped to a resource class
user = User.find(3) user.add_role :moderator, Forum
-
Starting from rolify 2.1,
grant
is a method alias foradd_role
user = User.find(4) user.grant :moderator, Forum.last
-
To check if a user has a global role:
user = User.find(1) user.add_role :admin # sets a global role user.has_role? :admin => true
-
To check if a user has a role scoped to a resource:
user = User.find(2) user.add_role :moderator, Forum.first # sets a role scoped to a resource user.has_role? :moderator, Forum.first => true user.has_role? :moderator, Forum.last => false user.has_role? :moderator => false # returns false because the role is not global user.has_role? :moderator, :any => true # returns true because the user has at least one moderator role
-
To check if a user has a role scoped to a resource class:
user = User.find(3) user.add_role :moderator, Forum # sets a role scoped to a resource class user.has_role? :moderator, Forum => true user.has_role? :moderator, Forum.first => true user.has_role? :moderator, Forum.last => true user.has_role? :moderator => false user.has_role? :moderator, :any => true
-
A global role has an implicit role for all resources:
user = User.find(4) user.add_role :moderator # sets a global role user.has_role? :moderator, Forum.first => true user.has_role? :moderator, Forum.last => true user.has_role? :moderator, Forum => true user.has_role? :moderator, :any => true
To be able to use dynamic shortcuts, you have to enable it first.
user = User.find(1)
user.add_role :admin # sets a global role
user.is_admin?
=> true
user.add_role :moderator, Forum.first
user.is_moderator_of? Forum.last
=> false
-
Check if the user has ALL specified roles
user = User.find(1) user.add_role :admin # sets a global role user.add_role :moderator, Forum.first # sets a role scoped to a resource instance user.add_role :visitor, Forum # sets a role scoped to a resource class user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum } => true user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.last } => false user.has_all_roles? :god, { :name => :visitor, :resource => Forum } => false
-
Check if the user has ANY of the specified role(s)
user = User.find(1) user.add_role :admin # sets a global role user.add_role :moderator, Forum.first # sets a role scoped to a resource user.add_role :visitor, Forum # set a role scoped to a resource class user.has_any_role? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum } => true user.has_any_role? :admin, { :name => :moderator, :resource => Forum.last } => true user.has_any_role? :god, { :name => :visitor, :resource => Forum } => true
-
Remove a global role
user = User.find(1) user.remove_role :admin => true # if user previously had an admin role
or (in case you get errors with the above method)
ruby user = User.find(1) user.remove_role "admin" => true # if user previously had an admin role
2. Remove a role scoped to a resource instance
```ruby
user = User.find(2)
user.remove_role :moderator, Forum.first
=> true # if user previously had a moderator role on Forum.first
```
-
Remove a role scoped to a resource class
user = User.find(3) user.remove_role :moderator, Forum => true # if user previously had a moderator role on Forum or any instance of Forum
-
Starting from rolify 2.1,
revoke
is a method alias forremove_role
user = User.find(4) user.revoke :moderator, Forum.first
Please note:
- Trying to remove a global role where the user has a role with the same name on a resource will remove that scoped role (whatever the scope is)
- Trying to remove a class scoped role where the user has an instance scoped role with the same name on a resource will remove that instance scoped role
- Trying to remove a role scoped to a resource class where the user has a global role won't remove it
- Trying to remove a role scoped to a resource instance where the user has a global role won't remove it
Starting with rolify 3.0, you can search roles on instance level or class level resources.
-
Instance level
forum = Forum.first forum.roles # => [ list of roles that are only bound to a forum instance ] forum.applied_roles # => [ list of roles bound to a forum instance and to the Forum class ]
-
Class level
Forum.with_role(:admin) # => [ list of Forum instances that has the role "admin" bound to it ] Forum.with_role(:admin, current_user) # => [ list of Forum instances that has the role "admin" bound to it and belongs to current_user roles ] Forum.find_roles # => [ list of roles that are bound to any Forum instance or to the Forum class ] Forum.find_roles(:admin) # => [ list of roles that are bound to any Forum instance or to the Forum class with "admin" as a role name ] Forum.find_roles(:admin, current_user) # => [ list of roles that are bound to any Forum instance or to the Forum class with "admin" as a role name and belongs to current_user roles ]
Previous: Configuration