enkr1
Hi Elixir community,
I am implementing RBAC into my project and have declared the routes that each role can access such as:
# User Management
scope "/users", MyWeb do
pipe_through([:browser, :require_authenticated_user, :require_admin_role])
live_session :crud_users, on_mount: MyWeb.UserAuthLive do
live("/", UserLive.Index, :index)
live("/new", UserLive.Index, :new)
live("/:id/edit", UserLive.Index, :edit)
live("/:id/show", UserLive.Index, :show)
# ...
end
end
# Product Management
scope "/products", MyWeb do
pipe_through([:browser, :require_authenticated_user, :require_role_product_manager])
live_session :crud_products, on_mount: MyWeb.UserAuthLive do
live("/", ProductLive.Index, :index)
# ...
end
end
Now, the accessible routes of each role of the users have been declared and it works perfectly.
The problem I am facing now is that I am trying to display certain elements on the frontend which requires checking the user’s role(s).
My current solution is to use a custom function like has_role?/2 to validate by passing in the user and required_roles. The problem here is that whenever there is a change in the user’s permission, we have to find the functions (has_role?/2) that need to be modified everywhere in the app.
To make it clearer, for instance:
There is this edit user button that can be accessed by admin & hr. One day, the app owner decided to not allow hr to edit users anymore. We have to change has_role?(user, ["Admin", "HR"]) to has_role?(user, ["Admin"]).
I was thinking if there is any method to check if this user has permission to access a route by validating from the declared routes in the router.ex instead of using a function like has_role?/2?
Thank you so much in advance,
Best wishes,
Jing Hui P.
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex









