加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel用户访问某些页面的权限?

发布时间:2020-12-14 19:36:15 所属栏目:大数据 来源:网络整理
导读:我创建了一个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 rou
我创建了一个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 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

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

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

谢谢您的帮助

解决方法

你需要一个像下面这样的设置.使用四个表(用户,角色权限和permission_role)创建类(模型):

表角色:

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

模特角色:

class Role extends ELoquent {

    protected $table = 'roles';

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

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

表权限:

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)

模型许可

class Permission extends ELoquent {

    protected $table = 'permissions';

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

表用户:

id | username | email           | password | role_id | more...
1  | admin    | admin@ymail.com | hashed   |    1    | more...
2  | user1    | user1@ymail.com | hashed   |    2    | more...
3  | user2    | user2@ymail.com | hashed   |    2    | more...

模型用户

class User extends ELoquent {

    protected $table = 'users';

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

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

表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 skug 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),所以我试着帮助但你需要尝试实施其余的.祝一切顺利.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读