binarycamp / shared-library
一个简单的Laravel包,包含常见的Utils类和基本功能
v0.1.16
2024-02-28 22:15 UTC
Requires
README
运行以下命令以获取最新版本
composer require binarycamp/shared-library
添加服务提供者
将服务提供者添加到config/app.php配置文件中的providers数组中,如下所示
'providers' => [
...
BinaryCamp\sharedLibrary\Providers\BinaryCampSharedLibraryServiceProvider::class,
]
发布配置 运行以下命令以发布包配置文件
php artisan vendor:publish --provider="BinaryCamp\sharedLibrary\Providers\BinaryCampSharedLibraryServiceProvider"
现在你应该有一个 config/shared_library.php 文件,允许你配置此包的基本设置。
环境变量
要启用自动数据库查询生成,请将以下环境变量添加到.env文件中
IS_QUERY_LOG_ENABLE=true
或者你可以手动声明查询日志生成方法
AppLog::setQueryLogStatus(status: true)->createQueryLog(file_name: "my_query_log");
创建应用程序日志
AppLog::createLog(action: "MY_EVENT_NAME", data: ["data1" => "John", "data2" => "Dao"], type: AppLogLevel::Info);
如果你想设置不同的日志通道,那么
AppLog::setChanel(chanel: config("logging.channels.daily"))->createLog(action: "MY_EVENT_NAME", data:["data1" => "John", "data2" => "Dao"], type: AppLogLevel::Info);
数据库事务
AppDB::transaction(function () use ($param1, $param2){
//operation 1
//operation 2
}, $attempt = 2);
或者你可以声明如下
try {
AppDB::beginTransaction();
//operation 1
//operation 2
AppDB::commit();
}catch (\Throwable $exception){
AppDB::rollBack()->createLog($exception);
}
API响应
成功响应
Return AppResponse::setSuccess(status_code: 100, status_message: "Operation Successful", data: ["data1" => "John", "data2" => "Dao"], http: 200)
->toJson();
如果你想要记录API响应,那么
AppResponse::setSuccess( status_code: 100, status_message: "Operation Successful", data: ["data1" => "John", "data2" => "Dao"], http: 200)
->createLog(action: "User Save Event")
->toJson();
失败响应
AppResponse::setError( status_code: 99, status_message: "Operation Failed", errors: [], http: 404)
->toJson();
如果你想要记录API响应,那么
AppResponse::setError( status_code: 99, status_message:"Operation Failed", errors: [], http:404)
->createLog(action: "User Save Event")
->toJson();
身份验证
生成公钥和私钥
php artisan generate:jwtKey
{audience : You must select an Audience. Audience is configured in shared_library.php file}
{version : version of the key}
{--length=4096}
{--force=0}
//example
php artisan generate:jwtKey USERS v2 --force=1
路由配置
Route::middleware('AppAuth')->get('/auth-check', function (Request $request) {
if (AppAuth::check()){
$authObj = AppAuth::getAuthInfo();
return AppResponse::setSuccess(100, 'Auth Checked Successfully', [
'authObj' => $authObj
], HttpCode::ACCEPTED)
->toJson();
}
});
在上面的示例中,AppAuth中间件被分配。这里AppAuth是中间件的名称。
通过电子邮件和密码生成令牌
Route::post('login', function (Request $request){
$userObj = \App\Models\User::query()->where('email', $request->email)->first();
if (!empty($userObj)){
AppAuth::setAudience("USERS")->setCustomClaim([
'user_id' => $userObj->id,
'company_id' => $userObj->company_id,
'usergroup_ids' => $userObj->usergroup_ids,
'name' => $userObj->name,
'email' => $userObj->email,
'phone' => $userObj->phone,
]
)->login();
return AppResponse::setSuccess(100, 'Token Generated Successfully', [
'access_token' => AppAuth::getToken(),
'refresh_token' => AppAuth::getRefreshToken(),
'authObj' => AppAuth::getAuthInfo(),
], HttpCode::ACCEPTED)
->toJson();
}
});
此受众来自config目录下名为shared_library.php的配置文件。
通过刷新令牌生成令牌
Route::post('/refresh', function (Request $request){
$refresh_token = $request->refresh_token;
try {
AppAuth::setToken($refresh_token)->validate()->verify();
//we can allow only one time access token by a refresh token
AppAuth::blackList();
$payload = AppAuth::getPayload();
$user_id = $payload['sub'];
$userObj = \App\Models\User::query()->find($user_id);
AppAuth::setAudience($payload['aud'])->setCustomClaim([
'user_id' => $userObj->id,
'company_id' => $userObj->company_id,
'usergroup_ids' => $userObj->usergroup_ids,
'name' => $userObj->name,
'email' => $userObj->email,
'phone' => $userObj->phone,
]
)->login();
return AppResponse::setSuccess(100, 'Token Generated Successfully', [
'access_token' => AppAuth::getToken(),
'refresh_token' => AppAuth::getRefreshToken(),
'authObj' => AppAuth::getAuthInfo(),
], HttpCode::ACCEPTED)
->toJson();
}catch (\Throwable $exception){
return AppResponse::setError(99, "Invalid Token", [], 400)
->toJson();
}
});
权限中间件
Route::middleware(['AppAuth', 'AppPermission'])->get('/check-permission', function (Request $request) {
return AppResponse::setSuccess(100, 'Permission Checked Successfully', [
'authObj' => AppAuth::getAuthInfo()
], HttpCode::ACCEPTED)
->toJson();
})->name('acl.check.permission');
要检查权限,需要AppAuth中间件。然后需要放置AppPermission。