php – Laravel用户访问某些页面的权限?
我创建了一个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,所以这允许我动态创建页面. 我还有角色表: // 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),所以我试着帮助但你需要尝试实施其余的.祝一切顺利. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |