如何使用三个级别的用户访问来路由多级用户列表和创建操作。

时间:2018-05-17 17:42:02

标签: php routes slim

这是要求。我将对受公众限制的仪表板(系统管理员,经理,员工)进行三级访问。

系统管理员,简单地说就是超级管理员。他们能够索引,显示,创建,更新,删除所有公司和用户。

管理员由系统管理员创建并分配给公司,他们只能为他们所属的公司编制索引,显示,创建,更新,删除员工。

员工拥有对其公司信息和文件的只读访问权限。

这是我当前为用户提供的路线。 (使用Slim Framework)

仅受中间件保护的系统管理员访问: 这些操作是供系统管理员管理所有用户的。

Format

系统管理员&管理员只能访问受中间件保护的内容: 这些交互是管理员管理员工的

/*** 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');

您会注意到,对于系统管理员,不需要公司ID。但是,对于商店经理来说。因此,这些交互将具有单独的查询。我的问题更多的是关于最佳实践。这个解决方案对我来说似乎有点不太重要,但它有效地分离了关注点,并简化了每个控制器上的方法以及访问控制所需的中间件。我完全错了吗?

1 个答案:

答案 0 :(得分:1)

我对所有角色都有相同的路由,因为URL代表了查看该信息的规范方式。

e.g。

$this->get('/companies/{id}/users', 'App\Controller\Company\CompanyUsersController:index')->setName('company.user.index');

是给定公司的用户列表的正确URL。

我知道商店经理只能访问自己公司的用户,但这并不意味着网址必须不同。这意味着即使她可以访问/companies/123/users,也无法访问/companies/456/users。这应该在组中间件或每个控制器中完成。就个人而言,我怀疑我会使用这样的组中间件:

$app->group(/companies/{id}, function () {
    $this->get('/users', 'App\Controller\Company\CompanyUsersController:index')->setName('company.user.index');
})->add(CheckUserCompanyMiddlerware::class);

并显示错误页面或重定向回商店经理的正确网址,如果他们转到"错误"公司