我已经阅读了文档,似乎无法找到我需要做的事情。我已安装此软件包Centaur
据我所知,它本质上是Sentinel的扩展,所以应该以同样的方式工作。安装和设置后,我可以创建用户和角色。这一切都很好。所以在我的布局视图中,我提供了一个指向客户索引页面的链接,我希望每个人都看到这个,所以我不做任何检查。
<li class="{{ Request::is('clients*') ? 'active' : '' }}"><a href="{{ route('clients.index') }}">Clients</a></li>
查看用户和角色控制器,我假设我在ClientsController中需要一个构造函数来说明权限。这就是我所拥有的
public function __construct(AuthManager $authManager)
{
// Middleware
$this->middleware('sentinel.auth');
$this->middleware('sentinel.access:users.view', ['only' => ['index', 'show']]);
$this->middleware('sentinel.role:administrator');
// Dependency Injection
$this->roleRepository = app()->make('sentinel.roles');
$this->authManager = $authManager;
}
我试图实现的是用户只能查看客户端,管理员可以更新它们。在我的编辑角色视图中,我添加了复选框
<div class="checkbox">
<label>
<input type="checkbox" name="permissions[clients.update]" value="1" {{ $role->hasAccess('clients.update') ? 'checked' : '' }}>
clients.update
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="permissions[clients.view]" value="1" {{ $role->hasAccess('clients.view') ? 'checked' : '' }}>
clients.view
</label>
</div>
根据情况,管理员可以查看和更新客户端。但是,当我以普通用户身份登录系统时,当我点击客户端链接时,我看到了
Error: You do not have permission to do that.
因此,在使用Sentinel创建新模型时,为某些操作授予用户/角色权限的过程是什么?
由于
答案 0 :(得分:1)
首先create the role,然后是attach the role to the user。
提供链接的快速示例:
$role = Sentinel::getRoleRepository()->createModel()->create([
'name' => 'Subscribers',
'slug' => 'subscribers',
]);
$user = Sentinel::findById(1);
// use this for lookup where you don't already have a role handy
$role = Sentinel::findRoleByName('Subscribers');
$role->users()->attach($user);
在您的情况下,可能类似于以下角色权限:
$role->permissions = [
"admin.view" => true,
"admin.update" => true
"user.view" => true,
"user.update" => false
];
$role->save();
然后一次性检查用户的权限和类型......这将是管理员用户尝试更新的示例
if (Sentinel::inRole('admin') and $user->hasAccess(['admin.update']) {
//
}
我很久没有使用过Sentinel,你可以完全省略inRole
检查,不确定。