php前端用户权限,php – 处理管理系统用户和前端网站用户时如何处理用户权限?...

我已经尝试了许多不同的权限方案,我只找到一种方法使它们在几乎所有情况下都能满足程序员和客户端的工作.这是为了使它们部分地受数据驱动.

我最近的尝试是这样的:

>每个用户都附加了一个权限对象.在我的情况下,在请求用户时自动创建. (在我的例子中,不同部分的权限可能不同.因此可能允许用户为Y执行X但不为Z执行.)

>需要允许的每个页面,代码块或视图都包含一个检查权限对象的if语句.如果该权限也需要担心该部分,则当前相关部分ID将作为数组传入,返回一个新的bool数组以匹配.

>接口不会直接向用户公开这个复杂的混乱,而是使用superadmin接口创建新的用户类型.这些类型带有将为该“类型”用户启用的权限集.不同类型的权限可能存在重叠,因此管理员和编辑者都可以“编辑复制”或其他任何内容.

>普通的管理界面允许将各个用户设置为不同部分的不同用户类型.因此,一个用户可能是第2部分的管理员,第2,3,4和5部分的编辑器.它们也可以全局设置,它会重载未使用的部分(0).

这有许多好处和一个缺点.一,缺点.因为这些密钥直接烘焙到代码中,所以只有superadmin(也称为开发人员)才能访问该界面的该部分.实际上,可能根本不需要接口,因为权限列表应该仅随代码而改变.这里真正的问题是,在运行代码之前,你不会知道标题有什么问题,因为语法会很好.现在,如果这是用C#编写的,这将是一个非常严重的问题.但几乎PHP中的所有东西都不是类型安全的,所以它实际上只是课程的标准.这些值也可以从配置文件加载,或者甚至烘焙到您构建用户类型的GUI中,尽管这似乎是错误的.

您从中获得的是能够动态设置新的权限类型.您可以相对轻松地重命名这些权限. (由于系统只使用数字,标题仅用于捕获数字,因此可以在几个地方轻松更改.)并且代码使用起来非常简单.它看起来像这样:

if($current_user->permissions->can("View Sales Records"))

{

//Code to view sales records

}

或者稍微复杂一点

$sections = array(1,2,3,4); //Probably really a list of all sections in the system

$section_permissions = $current_user->permissions->these($sections)->can("Edit Section");

foreach($sections as $s)

{

if($section_permissions[$s])

{

// Code for maybe displaying a list of sections to edit or something

}

}

链接方法也很简单. – > these()为这些值设置内部数组,然后返回对象本身的引用. – > can()然后作用于该列表(如果存在),然后取消设置.在我自己的版本中,我还有 – > any(),它总是返回一个完整的部分列表,所以我可以检查 – > any() – > can().

最后,权限对象还包含用户所属类型的列表.这样可以很容易地显示用户列表以及他们具有哪些权限.在我的例子中,我们只使用 – > types()来访问该列表的ids =>数组.名.

不存在的权限标题被简单地忽略.它们也以小写形式匹配,并且空格和特殊字符被删除,以帮助减少键入错误的问题.我甚至考虑过进行levenshtein距离检查并选择最接近的比赛.但最终,最好不要依赖类似的东西. (也许记录错误,但要优雅地选择最接近的匹配.)

在代码之外和界面中,用户只需要在管理员,编辑,发布者,作家和CEO等人之间相互关联,等等.为不同的组织创建不同的用户类型集也是微不足道的.

所有部分都可以大量缓存,为完全没有登录的人设置一个基本用户非常容易,而且我还没有遇到一个基于权限的问题,使用这个问题来解决这个问题并不明显结构体.

我只希望能和你分享实际的代码.我本人并不拥有它,因此无法发布.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值