PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
Slim 是一个PHP微框架,可帮助您快速编写简单但功能强大的Web应用程序和API。
Casbin 可用作 Slim Framework 中的一个授权中间件。
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
Slim 是一个PHP微框架,可帮助您快速编写简单但功能强大的Web应用程序和API。
Casbin 可用作 Slim Framework 中的一个授权中间件。
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
ABAC是基于属性的访问控制,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。
ABAC的官方实例如下:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == r.obj.owner
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
这里使用官方提供的数据库适配器扩展:Database adapter.
在Casbin中,适配器(adapter,Casbin的中间件)实现了policy规则写入持久层的细节。 Casbin的用户可以调用adapter的loadPolicy()方法从持久层中加载policy规则, 同样也可以调用savePolicy()方法将Policy规则保存到持久层中。 为了保持代码轻量, 我们没有将adapter的代码放在主库中。
文件适配器,是将Policy策略存储在.csv的文件中:
$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
也可以先初始化Adapter:
Model的加载方法主要有三种:
Casbin支持的model:https://github.com/php-casbin/php-casbin/blob/master/README_CN.md#%E6%94%AF%E6%8C%81%E7%9A%84Models
Model CONF 至少应包含四个部分: [request_definition], [policy_definition], [policy_effect], [matchers]。
如果 model 使用 RBAC, 还需要添加[role_definition]部分。
Model CONF 可以包含注释。注释以 # 开头,# 将注释整行。
与 policy 不同,model 只能加载,不能保存。 因为我们认为 model 不是动态组件,不应该在运行时进行修改,所以我们没有实现一个 API 来将 model 保存到存储中。
在 Casbin 中, 访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个文件。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。
Casbin中最基本、最简单的model是ACL。ACL中的Model CONF为:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Casbin中最核心的三个概念:Model, Policy, Enforcer。
Model就是一个CONF文件,基于PERM metamodel (Policy, Effect, Request, Matchers)。
PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin/php-casbin ),目前在 GitHub 开源。PHP-Casbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等。
1.支持自定义请求的格式,默认的请求格式为{subject, object, action};
2.具有访问控制模型 model 和策略 policy 两个核心概念;
经常会看到java里的这样的类型:
byte[] IV = { 0, 0, 0, 0, 0, 0, 0, 0 }
可惜的是,php作为弱类型语言,并没那么丰富的类型,下面提供了PHP中字符串与byte字节数组的互相转化的实例:
/**
* Byte数组转字符串
* @param array $bytes
* @return string
*/
function bytesToStr($bytes)
{
$str = '';
foreach ($bytes as $ch) {
$str .= chr($ch);
}
return $str;
}
/**
* 字符串转Byte数组
* @param string $string
* @return array
*/
function strToBytes($string)
{
$bytes = array();
for ($i = 0; $i < strlen($string); $i++) {
$bytes[] = ord($string[$i]);
}
return $bytes;
}
人在江湖走,哪有不湿鞋?
经常做api开发的的时候,总会遇到跨域的情况,特别是前后端完全分离的情况,为什么会这样呢?
最近对接一大堆接口,找了各种des加解密,很多都是php7以下的,要知道mcrypt_decrypt此类的方法再php7以上已经过时或废除了
Warning
This function has been DEPRECATED as of PHP 7.1.0 and REMOVED as of PHP 7.2.0. Relying on this function is highly discouraged.
搞了好久,好不容易看到了这个 https://blog.csdn.net/qq43599939/article/details/80226482 ,终于将C#、Java的代码转换成了php7的代码:
<?php
/**
* Des加解密,兼容java、C#
*/
class Des
{
/**
* 加密
* @author TechLee
* @param string $input
* @param string $key
* @param string $method
* @param string $iv
* @return string
*/
public static function encrypt($input, $key, $method = 'DES-ECB', $iv = null)
{
$iv = $iv ? $iv : self::createIv();
return base64_encode(openssl_encrypt($input, $method, $key, OPENSSL_RAW_DATA, $method == 'DES-ECB' ? '' : $iv));
}
/**
* 解密
* @author TechLee
* @param string $input
* @param string $key
* @param string $method
* @param string $iv
* @return string
*/
public static function decrypt($input, $key, $method = 'DES-ECB', $iv = null)
{
$iv = $iv ? $iv : self::createIv();
return openssl_decrypt(base64_decode($input), $method, $key, OPENSSL_RAW_DATA, $method == 'DES-ECB' ? '' : $iv);
}
/**
* 这个玩意相当于java里的
* byte[] iv = { 0, 0, 0, 0, 0,0, 0, 0 }
* 也相当于C#里的
* IV = new byte[8];
* @author TechLee
* @return [type] [description]
*/
public static function createIv()
{
return self::hexToStr("0000000000000000");
}
public static function hexToStr($hex)
{
$string = '';
for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
$string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
}
return $string;
}
}
ThinkPHP中的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作。
不熟悉的xhprof的,请参考前一篇文章:http://www.tech1024.com/original/2990.html
如果你还不了解thinkphp的钩子和行为,可以参考手册:https://www.kancloud.cn/manual/thinkphp5_1/354129
首先,我们在application/tags.php文件中,定义性能分析的行为,分别绑定在app_init、app_initApp初始化标和应用结束的钩子上:
很多项目,还没到考虑性能的时候就夭折了,而你项目是否到了要考虑性能优化的时候了?
经常会有人问,我的cpu正常,内存正常,数据库正常,可网站打开为什么就是慢?为什么就是卡?
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们