检查用户是否有权访问实体的最佳方法是什么

c4pone

我简化了数据库中的以下关系。

1 User -> n Projects
1 Project -> n Tasks
etc.

所以现在我经常在代码中陷入自我,做以下事情

// Get the current logged in User
$user = Session::getUser();
$project = $this->projects->findById($project_id);
if ( ! $project->hasOwner($user))
   // user does not own the project

而随着项目关系的发展,情况变得更糟。例如,然后我必须检查用户是否拥有项目,然后检查任务是否属于项目。

我当时想也许在这里使用“急切加载”,所以我可以根据给定的结果进行过滤。但是随后数据库不得不加载更多的数据,而这通常是必需的。正确的 ?

// Get the current logged in User
$user = Session::getUser();
$project = $user->projects()->find($project_id);
if ( ! $project)
   // user does not own the project

但是,即使我那样做,也会感觉到重复和晦涩。我想知道是否有更好的方法来解决这个问题?

奥秘

尽管用户可以访问他们的项目,但是您需要为将来与其他用户共享项目及其访问类型做好准备。

因此,project_permission强烈建议您使用一张桌子。

结构应如下:

id | project_id | grantee_user_id | access_user_id | 类型 created_at | Updated_at | Deleted_at

您将拥有3种权限:

  1. 所有者-完全许可
  2. 编辑权限
  3. 只读访问

您的权限模型:

class ProjectPermission extends Eloquent {
     protected $table = "project_permission";

     /*
     *  Types
     */

     const OWNER = 1;
     const EDIT = 2;
     const READ = 3;

     /*
     *  Scopes
     */

    public function scopeOwner($query)
    {
        return $query->whereType(self::OWNER);
    }

    public function scopeEdit($query)
    {
        return $query->whereType(self::EDIT);
    }

    public function scopeRead($query)
    {
        return $query->whereType(self::READ);
    }

    public function project()
    {
        return $this->belongTo('Project','project_id');
    }

}

和项目模型:

class Project extends Eloquent {
    ...
    //Always eager load project permission
    public $with = ['permission'];

    public function permission()
    {
        return $this->hasMany('ProjectPermission','project_id');
    }

    public function scopeUserIsOwner($query,$user_id)
    {
        return $query->has('permission'=>function($q){
            return $q->owner()->where('access_user_id','=',$user_id);
        });
    }

    public function scopeCurrentUserIsOwner($query,$user_id)
    {
        $user = Session::getUser();
        $user_id = $user ? $user->id : 0;

        return $query->has('permission'=>function($q){
            return $q->owner()->where('access_user_id','=',$user_id);
        });
    }

    /*
    *  @param int $user_id
    *  @return boolean
    */
    public function hasAccessOwner($user_id)
    {
        return (bool)$this->permission()->whereType(\ProjectPermission::OWNER)->->whereAccessUserId($user_id)->count();
    }
}

理想情况下,您应该只加载用户有权访问的项目。并且如果需要检查访问权限,这些hasAccess..功能将很方便。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查用户是否有权访问实体的最佳方法是什么

来自分类Dev

检查用户是否有权访问对象

来自分类Dev

如何根据用户的角色检查用户是否有权访问页面

来自分类Dev

c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

检查用户是否有权访问Yii RBAC中的操作

来自分类Dev

Spring Security-如何检查用户是否有权访问自己的资源?

来自分类Dev

在实体框架中检查表中是否没有行的最佳方法是什么?

来自分类Dev

如何编写一个Mixin来检查登录用户是否有权访问某些模型实例

来自分类Dev

首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

有权访问门户的用户列表

来自分类Dev

Angular-无法获得当前用户的警卫角色来检查他/她是否有权访问受保护的路由

来自分类Dev

PHP验证用户有权访问内容

来自分类Dev

列出用户有权访问的文件和目录

来自分类Dev

检查设备是否可以访问互联网的最佳方法是什么?

来自分类Dev

使用HMABTM验证所有权的最佳方法

来自分类Dev

用户是否有权在/ home / userDir之外写?

来自分类Dev

是否可以在没有root用户访问权限的情况下更改文件的所有权?

来自分类Dev

是否可以在没有root用户访问权限的情况下更改文件的所有权?

来自分类Dev

检查用户是否具有权限

来自分类Dev

SQL Server 2012-将架构所有权分配给用户的目的是什么?

来自分类Dev

管理每个用户的访问日志的最佳方法是什么?

来自分类Dev

检查所有位是否均为1的最佳方法是什么?

来自分类Dev

检查所有位是否均为1的最佳方法是什么?

来自分类Dev

检查属性是否存在和设置的最佳方法是什么?

来自分类Dev

检查Torch :: Tensor是否为空的最佳方法是什么?

来自分类Dev

检查 FileInputStream 是否关闭的最佳方法是什么?

来自分类Dev

为什么索引方法需要所有权?

来自分类Dev

共享资源的基于锁的同步方法中的所有权是什么意思?

来自分类Dev

如何使用boto3在aws中检查s3访问密钥是否有权访问特定存储桶

Related 相关文章

  1. 1

    检查用户是否有权访问实体的最佳方法是什么

  2. 2

    检查用户是否有权访问对象

  3. 3

    如何根据用户的角色检查用户是否有权访问页面

  4. 4

    c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  5. 5

    检查用户是否有权访问Yii RBAC中的操作

  6. 6

    Spring Security-如何检查用户是否有权访问自己的资源?

  7. 7

    在实体框架中检查表中是否没有行的最佳方法是什么?

  8. 8

    如何编写一个Mixin来检查登录用户是否有权访问某些模型实例

  9. 9

    首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  10. 10

    有权访问门户的用户列表

  11. 11

    Angular-无法获得当前用户的警卫角色来检查他/她是否有权访问受保护的路由

  12. 12

    PHP验证用户有权访问内容

  13. 13

    列出用户有权访问的文件和目录

  14. 14

    检查设备是否可以访问互联网的最佳方法是什么?

  15. 15

    使用HMABTM验证所有权的最佳方法

  16. 16

    用户是否有权在/ home / userDir之外写?

  17. 17

    是否可以在没有root用户访问权限的情况下更改文件的所有权?

  18. 18

    是否可以在没有root用户访问权限的情况下更改文件的所有权?

  19. 19

    检查用户是否具有权限

  20. 20

    SQL Server 2012-将架构所有权分配给用户的目的是什么?

  21. 21

    管理每个用户的访问日志的最佳方法是什么?

  22. 22

    检查所有位是否均为1的最佳方法是什么?

  23. 23

    检查所有位是否均为1的最佳方法是什么?

  24. 24

    检查属性是否存在和设置的最佳方法是什么?

  25. 25

    检查Torch :: Tensor是否为空的最佳方法是什么?

  26. 26

    检查 FileInputStream 是否关闭的最佳方法是什么?

  27. 27

    为什么索引方法需要所有权?

  28. 28

    共享资源的基于锁的同步方法中的所有权是什么意思?

  29. 29

    如何使用boto3在aws中检查s3访问密钥是否有权访问特定存储桶

热门标签

归档