Ruby - check if user is a member of a group or role?

Hello

From ruby, is it possible to check if current user is a member of XYZ group or role?

I tried with:

if User.current.roles.exists?(name: 'My Custom Role')

But it seems it doesn’t work as it lists only Default Group which is not true.

I am using Foreman 3.13

I didn’t check if this works, but I think this is more likely to work:

User.current.roles.where(name: 'My Custom Role').exists?

Foreman uses ActiveRecord as a database abstraction so Active Record Query Interface — Ruby on Rails Guides may be helpful to understand it.

Though it may help to describe what you’re trying to achieve. Usually we introduce specific permissions which can be assigned to roles. Then you verify a user has a specific permission.

1 Like

Also make sure to use cached_roles[1], if you just check roles it wouldn’t give you those, that are assigned through user groups or their children.

[1] foreman/app/models/user.rb at develop · theforeman/foreman · GitHub

1 Like

Hello

Thank you for the replies.
This worked, I used cached_roles as Marek suggested:

User.current.cached_roles.where(name: 'My Custom Role').exists?

What I want to achieve? Well I would like to hide certain custom buttons / links in the Hosts/All Hosts view if user is not added to my custom role.