archey347/uf_altpermissions

UserFrosting V4 的替代/补充权限系统

资助包维护!
Ko Fi

安装: 4

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 1

类型:userfrosting-sprinkle

v1.1.2-alpha 2021-10-09 19:42 UTC

This package is auto-updated.

Last update: 2024-09-10 01:46:35 UTC


README

Build Status StyleCI UserFrosting Version Donate

UserFrosting 4 提供替代/补充权限系统

此扩展包仍在开发中,尚未准备好用于生产环境。尚未发布官方版本。欢迎测试和贡献,或将其作为参考。

帮助和贡献

如果您需要使用此扩展包的帮助或发现任何错误,请随意打开一个问题或提交一个拉取请求。您还可以在大多数时间在 UserFrosting Chat 上找到我以获得直接支持。

安装

编辑 UserFrosting app/sprinkles/sprinkles.json 文件,并将以下内容添加到 require 列表

"lcharette/UF_AltPermissions": "dev-master"

运行 composer update 然后 composer run-script bake 安装扩展包。

使用方法

权限Slug继承

如果您有一组在页面上可用的操作权限,您可以使用点分隔符将它们组合在一起。

例如,如果您有一个允许您管理团队的页面,您可能有权限 team.viewteam.editteam.delete。然后,为了测试对页面的访问权限,您可以执行 hasPermission('team') 而不是必须测试每个权限。 `

上述替代方案

如果您有两个具有不同seeker类型的权限在同一命名空间内,则上述系统会导致问题。更好的做法是有一个由所有人共享的公共权限,您可以对其进行测试。

Seeker 父/子关系

这允许具有不同seeker的权限和角色相互关联。

例如,您可能有一个场景,其中您有多个组织,每个组织内部有多个团队。您可能需要给予某些人访问单个组织内所有团队的权利,而其他人则只访问单个团队。您可以通过有一个具有seeker类型 teamteam.view 权限,并有一个具有seeker类型 organisationOrganisation Manager 角色来实现这一点。然后,您必须修改组织和团队模型,以便访问控制层知道存在父子关系。

class Organisation extends Model implements IPermissionParent
{
    protected $table = 'organisations';

    protected function getChildren($seekerType) {
        if($seekerType == 'team') {
            return $this->teams();
        }
    }

    protected function teams() {
        return $this->hasMany('...Models\Team');
    }

    ...
}

class Team extends Model implements IPermissionChild
{
    $table_name = 'teams';

    protected function getChildren($seekerType) {
        if($seekerType == 'team') {
            return $this->teams();
        }
    }

    protected function teams() {
        return $this->hasMany('...Models\Team');
    }

    ...
}

如果您有一个具有3层层次结构的场景,您必须明确描述所有三者的关系,因为系统(目前)还不够聪明,无法自己解决这个问题。线条代表在模型中已声明的父子关系。

Companies  <------
   /|\           |
    |            |
   \|/           |
Company Sectors  |
   /|\           |
    |            |
   \|/           |
  Team     <------

许可证

Louis Charette 提供。版权(c)2017,根据MIT许可证免费用于个人和商业软件。