first commit

This commit is contained in:
liu
2026-07-13 15:23:29 +08:00
commit 50885a98c8
473 changed files with 33772 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
<?php
namespace Modules\SystemUser\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User;
use Illuminate\Notifications\Notifiable;
use Laravel\Ai\Concerns\HasConversations;
use Laravel\Sanctum\HasApiTokens;
use Modules\SystemTool\Models\SysFileModel;
/**
* 系统用户模型
*/
class SysUserModel extends User
{
use SoftDeletes, HasConversations, HasApiTokens, HasFactory, Notifiable;
protected $table = 'sys_user';
protected $primaryKey = 'id';
protected $fillable = [
'username',
'password',
'nickname',
'avatar_id',
'bio',
'sex',
'mobile',
'email',
'email_verified_at',
'dept_id',
'login_ip',
'login_time',
'status'
];
protected $casts = [
'email_verified_at' => 'datetime',
'login_time' => 'datetime',
'status' => 'integer',
'sex' => 'integer',
'avatar_id' => 'integer',
'dept_id' => 'integer'
];
protected $appends = ['role_id', 'dept_name', 'avatar_url'];
protected $with = ['dept', 'avatar'];
protected $hidden = [
'dept',
'avatar',
'password',
'remember_token',
'deleted_at',
];
/**
* 定义与部门的归属关系
*/
public function dept(): BelongsTo
{
return $this->belongsTo(SysDeptModel::class, 'dept_id', 'id');
}
/** 部门名称 */
public function getDeptNameAttribute(): string
{
return $this->dept->name ?? '';
}
/**
* 定义与角色的关联
*/
public function roles(): BelongsToMany
{
return $this->belongsToMany(SysRoleModel::class, 'sys_user_role', 'user_id', 'role_id');
}
/**
* 获取用户角色列表
*/
public function getRoleIdAttribute()
{
return $this->roles()
->pluck('id')->toArray();
}
/**
* 定义与登录日志的关联
*/
public function loginRecords(): HasMany
{
return $this->hasMany(SysLoginRecordModel::class, 'user_id', 'id');
}
/**
* 关联用户头像
* @return HasOne
*/
public function avatar(): HasOne
{
return $this->hasOne(SysFileModel::class, 'id', 'avatar_id');
}
/**
* 获取用户角色列表
*/
public function getAvatarUrlAttribute()
{
if($this->avatar) {
return $this->avatar->preview_url;
}
return null;
}
/**
* 获取用户所有权限
* @return array
*/
public function access(): array
{
if($this->id == 1) {
return SysRuleModel::query()
->where('status', 1)
->pluck('key')
->toArray();
}
$roles = SysUserModel::with(['roles.rules' => function ($query) {
$query->where('status', 1);
}])->find($this->id)->roles->toArray();
return collect($roles)
->map(fn ($item) => $item['rules'] )
->collapse()
->map(fn ($item) => $item['key'] )
->unique()
->toArray();
}
}