at this place it would make sense to use CanCan.

But how can check responsible user/deputy with CanCan?
And how can you distinguish between Student and Staff in CanCan, since they are no standalone-model?
Until that the responsibilitys are not in one place.