多角色用户权限

1. 定义关联模型

在Laravel里面,我们可以通过定义以下Model来完成关联查询。

class MyPost extends Eloquent {
    public function myPostInfo () {
        return $this->hasOne('MyPostInfo');
    }
}

class MyPostInfo extends Eloquent {}

Laravel 多角色用户权限

2. 使用关联模型

这里myPostInfo()用的是Camel命名规则,但是我们在读取某一个PostInfo的时候可以用Snake规则。如下面代码都是可行的:

$post = MyPost::find(1);
$post_info = $post->myPostInfo; // example 1
$post_info = $post->my_post_info; // example 2

Laravel允许上述两种方法,但是没有合理的处理使用两种命名造成的冲突。

1.什么是多角色?

角色和权限是许多 Web
应用程序的重要组成部分。角色就是用户在站点中的身份,很多时候与站点权限相关联。

澳门新葡亰娱乐在线,以一个 BBS 系统为例,将会有以下角色,他们的权限由低到高:

  • 游客 —— 没有登录的用户

  • 用户 —— 登录用户

  • 管理员 —— 社区内容管理

  • 站长 —— 权限最高的用户角色

游客 可以随便浏览页面,但是无法发布内容;

用户 能够发布内容,却只能管理自己的内容;

管理员 可以管理所有用户的内容,然而不能管理用户;

站长 拥有最高权限,可以管理所有内容,包括用户。

在代码中,我们使用 Role
数据模型来作为角色的表现,角色能做的动作,我们称之为权限,使用数据模型
Permission 来表现。

3. 缓存失效

如果我们同时使用了上述两个例子,就会使其中一个缓存失效。在Model的relations变量中,缓存了已经读取过的关联Model,但是当我们用不同规则的名字去读取的时候,却会使得前一个缓存失效。例如

$post_info = $post->myPostInfo; 
// $post->relations = [‘myPostInfo’ => ..];

$post_info = $post->my_post_info;
// $post->relations = [‘myPostInfo’ => …, ‘my_post_info’ => …];

所以如果不希望缓存失效,得在项目中只使用一种命名方法去读取关系模型。Laravel推荐的是Camel
Case.

2.Laravel 自带了简单的用户授权方案

  • Gates 和 Policies
  • $this->authorize() 方法
  • @can 和 @cannot Blade 命令

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图