There isn't a mechanism that I know of to apply dashboard-level component security out of the box, however if you were to have a means to pass username (or access level derived via exit) to a BEx query (using an exit or a number of other techniques) or a UNX (if you are using relational sources) and pass username (or derived access level) that way, you could then build off of that access level field to hide/show certain components or buttons, or prevent certain datasources from loading in script, etc. It would be a lot of work but I think you have the fundamental pieces to implement a homegrown system.
The alternative is seperate, similar dashboards each which are trimmed to each access level, but then that become a maintenance issue in the future.