Laravel 用户有权访问某些页面吗?

2024-02-22

我创建了一个 slug 页面,如下所示:

// Create pages table for dynamic pages
| id |  slug   |   title    | page_template |
|  0 | about   | about us   | about.blade   |
|  1 | contact | contact us | contact.blade |

我将通过以下路线访问它们:

// could be page/{slug} or only slug inside routes.php
Route::get('/{slug}', array('as' => 'page.show', 'uses' => 'PageController@show'));

我有一个 PageController,所以这允许我动态创建页面。 参考这里的解决方案:Laravel 从 Mysql 数据库创建到控制器的动态路由 https://stackoverflow.com/questions/23145245/laravel-creating-dynamic-routes-to-controllers-from-mysql-database

我还有一个角色表:

// Create roles table for
| id | name  |
|  0 | user  |
|  1 | admin |

我还有另一张表需要许可:

// permission table 
| role_id | page_id |
|    0    |    0    |
|    0    |    1    |
|    1    |    1    |

这将帮助我设置每个角色类型的权限,例如,如果您是用户,您只能访问“关于”页面,如果您是管理员,您可以访问所有页面等。

我的问题是:我怎样才能做到这一点,我是否在我的路线中添加一个过滤器,以检查用户是否可以访问该 slug 页面?那么我在里面做这个吗routes.php或里面filters.php?如何?

谢谢您的帮助


您需要如下设置。创建具有四个表(users、roles、permissions 和permission_role)的类(模型):

Table roles:

id | name (role name)
1  | admin
2  | user

Model Role:

class Role extends ELoquent {

    protected $table = 'roles';

    public function users()
    {
        return $this->hasMany('User', 'role_id', 'id');
    }

    public function permissions()
    {
        return $this->belongsToMany('Permission');
    }
}

Table permissions:

id | name (permission name)
1  | manage_pages (add/edit/delete)
2  | manage_users (add/edit/delete)
3  | page_about (access allowed to about page)
4  | page_contact (access allowed to contact page)

Model Permission

class Permission extends ELoquent {

    protected $table = 'permissions';

    public function roles()
    {
        return $this->belongsToMany('Role');
    }
}

Table users:

id | username | email           | password | role_id | more...
1  | admin    | [email protected] /cdn-cgi/l/email-protection | hashed   |    1    | more...
2  | user1    | [email protected] /cdn-cgi/l/email-protection | hashed   |    2    | more...
3  | user2    | [email protected] /cdn-cgi/l/email-protection | hashed   |    2    | more...

Model User

class User extends ELoquent {

    protected $table = 'users';

    public function role()
    {
        return $this->belongsTo('Role', 'role_id', 'id');
    }

    public function can($perm = null)
    {
        if(is_null($perm)) return false;
        $perms = $this->role->permissions->fetch('name');
        return in_array($perm, $perms->toArray());
    }
}

Table permission_role(数据透视表):

id | permission_id | role_id
1  | 1             | 1
2  | 2             | 1
3  | 3             | 1
4  | 4             | 1
5  | 3             | 2
6  | 4             | 2

一旦完成此设置,您就可以创建过滤器,或者在类方法中您可以检查登录用户是否具有特定规则或权限,然后允许访问页面,否则不允许。例如,您可以使用如下方式检查登录用户是否可以访问页面:

if(Auth::user->can('manage_pages')) {
    // Let him/her to add/edit/delete any page
}

由于您的页面是动态的并且所有页面都由show方法然后在你的show方法你可以检查这样的东西:

public function show($slug = 'home')
{
    // assumed page slug is 'about'
    $permission = 'page_' . $slug;
    if(Auth::user->can($permission)) {
        $page = page::whereSlug('home')->get();
        return View::make('pages.index')->with('page', $page);
    }
}

这确实是一个很大的问题,需要你自己去解决。我向您提供了一些实现的基本想法,现在您应该扩展它。


P/S:不可能从地面回答所有问题,但我参与了您的同一个项目的另一个答案,我建议您实施权限基础(ACL),所以我试图提供帮助,但您需要尝试执行其余部分。一切顺利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 用户有权访问某些页面吗? 的相关文章

  • 为什么 LinkedIn v2 Share API 在任何 v2/shares 端点上给出权限不足的错误?

    当我调用任何 v2 LinkedIn 共享 API 端点时 例如https api linkedin com v2 socialActions https api linkedin com v2 socialActions share UR
  • 通过php将mp3转换为ogg

    我有一个网站 用户可以上传音乐并将其转换为 mp3 但我需要 mp3 和 ogg 文件支持才能以 html5 播放音乐 那么 有没有可以将mp3转换为ogg的php脚本呢 使用 ffmpeg 您可以直接从 php 脚本执行命令
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • 从 json 数组获取值并执行 sql 插入

    这是我的数组 json 1 Device ID a9a3346be4375a92 Date 2012 05 31 Time 15 22 59 Latitude 51 4972912 Longitude 0 1108178 2 Device
  • 未找到“MongoId”类(带有 MongoDB Doctrine 的 Zend 框架)

    我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成 我做了很多教程 在 StackOverflow 或其他地方 但没有任何效果 我一步步按照教程进行操作 http www bigwisu com
  • 匹配括号内任何字符的正则表达式

    尝试创建一个与括号内的任何字符匹配的正则表达式 我的正则表达式模式是这样的 preg match listanswer answer 括号内的所有字符串都是匹配模式 但问题是 当我尝试匹配例如 this word sample data 它
  • 如何在 Laravel 中 session_write_close() ?

    Running session write close before sleep 在 Laravel 中似乎不起作用 因为会话仍然被其他请求阻止 直到当前连接完成 我试图sleep 在 Laravel 中 不会阻止其他请求 发现 sessi
  • Symfony 学说错误“DoctrineMigrationsBundle 需要启用 DoctrineBundle。”

    我创建了一个新的 Symfony 项目 并且不断收到此消息 DoctrineMigrationsBundle 需要启用 DoctrineBundle 错误并且无法摆脱它 显然我是这个星球上唯一一个收到此错误的人 因为谷歌并没有太大帮助 在
  • HTTP_REFERER 返回 NULL,$_SERVER 中不存在密钥

    使用以来第一次 SERVER HTTP REFERER 它给了我NULL因此 当我做var dump SERVER the HTTP REFERER密钥不存在 我还尝试使用不同的浏览器和不同的网站访问网站 但没有结果 该网站在基于 Linu
  • Laravel 5.6 - 注册表无法正常工作并且不显示任何错误

    在我最近的一个项目中 定制登记表不管用 当我单击注册按钮时 它会重新加载注册表单 不会打印任何错误 并且不会将数据插入数据库中 这是注册表的外观 这里是移民文件代码 public function up Schema create user
  • PHP,文本从数据库中回显,没有换行,全部一体

    我的数据库中有一个长文本 从 php mayadmin 来看它看起来很好 但是当我将它回显到页面时 它会丢失所有格式 即没有新行 全部都在一个块中 有任何想法吗 Thanks 可能是因为换行符是 n 并且 html 想要 br 所以使用nl
  • 在 Laravel 中按数据透视表 create_at 排序

    在我的数据库中 我有以下表格 courses id 名称 创建时间 更新时间 students id 名称 创建时间 更新时间 课程 学生 id course id student id created at updated at 我正在尝
  • Mongodb $push 嵌套数组

    我想向我的嵌套数组添加新数据 我的文档是 username erkin email email protected cdn cgi l email protection password b playlists id 58 name asd
  • .htaccess 在动态文件夹名称中加载索引

    我在 htaccess 加载动态文件夹名称中的索引时遇到问题 这是我的目录结构 root products gt this is constant folder name 而不是使用 GET 获取产品 url root products i
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • 如何使用额外标记输出 wp_list_categories

    我目前正在使用下面的脚本在无序列表中输出我的所有 WordPress 类别 如何获得带有额外标记的输出 ul ul 例如 ul li Category 1 rsaquo li li Category 2 rsaquo li ul 代替 ul
  • 使用 PHP 修剪字符串开头的任何零

    用户将在字段中填写与其帐户相关的数字 不幸的是 一些用户会在号码开头添加零来组成六位数字 例如 000123 001234 而其他用户则不会 例如 123 1234 我想 修剪 前面带有零前缀的用户的数字 因此如果用户输入 000123 它
  • 如何从列表创建多维数组?

    我在 MySQL 中有一个带有父 ID 的类别列表 如何从列表中创建 PHP 数组 ID Category Parent ID 1 Car NULL 2 Education NULL 3 Mathematics 2 4 Physics 2
  • 运行一个特定的 Laravel 迁移(单个文件)

    我的项目中有 5 次迁移 我只想运行这些迁移之一 是否可以将单个文件的名称传递给php artisan migrate命令 您可以将迁移放入更多文件夹中并运行如下命令 php artisan migrate path app databas

随机推荐