【问题标题】:Select roles to view this only page in Laravel选择角色以在 Laravel 中查看此唯一页面
【发布时间】:2020-02-26 15:41:47
【问题描述】:

我想限制用户角色在 Laravel 中查看我网站的特殊页面。所以我尝试在我的页面控制器的 edit.blade.php 中添加角色列表:

<div class="form-group m-form__group row">
    <label for="example-text-input" class="col-2 col-form-label">
        <Permision></Permision>
    </label>
    <div class="col-10">
        @foreach($roles as $value)
            <label>{{ Form::checkbox('permission[]', $value->id, false, array('class' => 'name')) }}
                {{ $value->name }}</label>
            <br/>
        @endforeach
    </div>
</div>

在我的控制器编辑功能上也有:

public function edit($id)
{

    $object = Set::find($id);
    $roles = Role::orderBy('id','DESC')->paginate(5);

    $page = new \stdClass();
    $page->title = 'edit item';
    $page->form = 'set.form';
    $page->formMethod = 'post';
    $page->formAction = ["SetController@update", $id];
    $page->uploadURL = '';
    $page->submitButton = 'Submit';
    $page->is_edit = 1;



    return view('set.create', compact('page', 'object','roles'));

}

现在我不知道如何在这个控制器的数据库表中保存角色并限制 show.blade.php 的用户

问题是如何在这个页面的每个数据库表行中添加可用角色?

【问题讨论】:

  • 您可以在您的用户数据库表中设置附加列角色并使用Auth::user()-&gt;role访问它
  • 我在保存角色或权限方面没有问题我正在使用这个库:jeremykenedy\LaravelRoles\Models\Role,问题是如何选择每个角色以查看特殊页面。我不想在前面那样做。我正在尝试让管理员用户选择角色来查看该页面。

标签: php laravel


【解决方案1】:

您可以使用 Spatie/laravel-permission

之类的包

此包允许您管理数据库中的用户权限和角色。

安装后,您可以执行以下操作:

// Adding permissions to a user
$user->givePermissionTo('edit articles');

// Adding permissions via a role
$user->assignRole('writer');

$role->givePermissionTo('edit articles');

因为所有的权限都会在 Laravel 的 Gate 上注册,所以你可以通过 Laravel 默认的 can 函数来检查用户是否有权限:

$user->can('edit articles');

如果您想构建自己的角色权限管理,您可以执行以下操作:

创建一个rolespermissions 表。 然后将每个 role_id 及其权限存储在roles_permissions 表中。

注意:您可以在Redis 中缓存这个roles_permissions 关联以避免重复的数据库查询

您应该在Users 表中添加相关的role id

现在编写一个函数来检查特定角色是否具有权限集。

checkUserHasPermission(String $permissionKey, User $user):bool
{
    $rolePermissions = functionToGetPermissionForRole($user->role);
    return (boolean) in_array($permissionKey, $rolePermissions);
}
functionToGetPermissionForRole($roleId):array 
{
// add your logic to return the permissions associated with the specific role id
}

注意:如果您在 Redis 中缓存您的角色权限关联,请不要忘记在更新角色和权限时更新 Redis。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多