archey347 / uf_altpermissions
UserFrosting V4 的替代/补充权限系统
Requires
- php: >=5.6
- lcharette/uf_formgenerator: ^3.0.0 | ^4.0.0
This package is auto-updated.
Last update: 2024-09-10 01:46:35 UTC
README
为 UserFrosting 4 提供替代/补充权限系统
此扩展包仍在开发中,尚未准备好用于生产环境。尚未发布官方版本。欢迎测试和贡献,或将其作为参考。
帮助和贡献
如果您需要使用此扩展包的帮助或发现任何错误,请随意打开一个问题或提交一个拉取请求。您还可以在大多数时间在 UserFrosting Chat 上找到我以获得直接支持。
安装
编辑 UserFrosting app/sprinkles/sprinkles.json
文件,并将以下内容添加到 require
列表
"lcharette/UF_AltPermissions": "dev-master"
运行 composer update
然后 composer run-script bake
安装扩展包。
使用方法
权限Slug继承
如果您有一组在页面上可用的操作权限,您可以使用点分隔符将它们组合在一起。
例如,如果您有一个允许您管理团队的页面,您可能有权限
`team.view
、team.edit
、team.delete
。然后,为了测试对页面的访问权限,您可以执行 hasPermission('team')
而不是必须测试每个权限。
上述替代方案
如果您有两个具有不同seeker类型的权限在同一命名空间内,则上述系统会导致问题。更好的做法是有一个由所有人共享的公共权限,您可以对其进行测试。
Seeker 父/子关系
这允许具有不同seeker的权限和角色相互关联。
例如,您可能有一个场景,其中您有多个组织,每个组织内部有多个团队。您可能需要给予某些人访问单个组织内所有团队的权利,而其他人则只访问单个团队。您可以通过有一个具有seeker类型 team
的 team.view
权限,并有一个具有seeker类型 organisation
的 Organisation 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许可证免费用于个人和商业软件。