以下是要求。我将有三个级别的权限访问受限制的仪表板,这些仪表板不允许公众访问(系统管理员、经理、员工)。
简单地说,系统管理员本质上是超级管理员。他们能够索引、显示、创建、更新和删除所有公司和用户。
经理由系统管理员创建并分配给公司,他们只能索引、显示、创建、更新和删除所属公司的员工。
员工对其公司信息和文件具有只读访问权限。
这是我目前为用户提供的路线。(使用Slim框架)
受中间件保护的仅限系统管理员访问:
这些操作由系统管理员管理所有用户。
/*** USERS ***/
// View to List Users
$this->get('/users', 'App\Controller\User\UserController:index')->setName('user.index');
// View containing user registration form
$this->get('/users/new', 'App\Controller\User\UserController:create')->setName('user.create');
// Creates new user from registration form
$this->post('/users' , 'App\Controller\User\UserController:store');
// Show single user view
$this->get('/users/{id}', 'App\Controller\User\UserController:show')->setName('user.show');
// View containing edit user form
$this->get('/users/{id}/edit', 'App\Controller\User\UserController:edit')->setName('user.edit');
// Updates new user from edit user form
$this->put('/users/{id}', 'App\Controller\User\UserController:update');
// Deletes new user from edit user form
$this->delete('/users/{id}', 'App\Controller\User\UserController:delete');
系统管理(&A);受中间件保护的仅管理器访问:
这些互动供经理管理员工
/*** COMPANIES Employees ***/
// View to List Companies employees
$this->get('/companies/{id}/users', 'App\Controller\Company\CompanyUsersController:index')->setName('company.user.index');
// View containing new employee registration form
$this->get('/companies/{id}/users/new', 'App\Controller\Company\CompanyUsersController:create')->setName('company.user.create');
// Creates new employee from registration form
$this->post('/companies/{id}/users' , 'App\Controller\Company\CompanyUsersController:store');
// Show single user
$this->get('/companies/{id}/users/{id}', 'App\Controller\Company\CompanyUsersController:show')->setName('company.user.show');
// View containing edit company employee form
$this->get('/companies/{id}/users/{id}/edit', 'App\Controller\Company\CompanyUsersController:edit')->setName('company.user.edit');
// Updates user from edit user form
$this->put('/companies/{id}/users/{id}', 'App\Controller\Company\CompanyUsersController:update');
// Deletes new user from edit user form
$this->delete('/companies/{id}/users/{id}', 'App\Controller\Company\CompanyUsersController:delete');
您会注意到,对于系统管理员,不需要公司id。然而,对于商店经理来说,情况确实如此。因此,这些交互将有单独的查询。我的问题更多的是关于最佳实践。这个解决方案对我来说似乎有点多余,但它有效地分离了关注点,并简化了每个控制器上的方法以及访问控制所需的中间件。我是不是完全错了?