Introduce role management
... e.g. using Pundit
You can replace blocks like
#/app/models/user.rb
def writing_permission_for?(scene)
return true if admin?
if scene.class.name == 'MainScene'
main_scenes_users.find_by(main_scene_id: scene.id)&.edit?
elsif scene.class.name == 'GeoScene'
geo_scenes_users.find_by(geo_scene_id: scene.id)&.edit?
elsif scene.class.name == 'Scene'
main_scenes_users.find_by(main_scene_id: scene.main_scene.id)&.edit?
end
end
in a clean manner. Howto: https://learn.co/lessons/devise_pundit_readme