| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | <?phpnamespace App\Models;use Illuminate\Database\Eloquent\Model;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Support\Str;use Illuminate\Http\Request;use Illuminate\Support\Facades\Validator;class User extends Authenticatable{    protected $guarded = [];    public function getValidator(Request $request, $type)    {        if ($type == 'store') {            $validator = Validator::make($request->input('data'), [                'name' => 'required|unique:users'            ], [                'name.required' => '用户名必填',                'name.unique' => '用户名已存在'            ]);        } else if ($type == 'change-password') {            $validator = Validator::make($request->input('data'), [                'old_password' => 'required',                'password' => 'required|min:6|confirmed'            ], [                'old_password.required' => '请填写原来密码',                'password.required' => '密码必填,且不能少于6位',                'password.min' => '密码必填,且不能少于6位',                'password.confirmed' => '两次填写的密码不一致'            ]);        } else {            $validator = Validator::make($request->input('data'), [                'name' => 'required'            ], [                'name.required' => '账号必填'            ]);            $data = $request->input('data');            $check = $this->where([                ['id', '!=', $request->input('id')],                ['name', '=', $data['name']]            ])->first();            $validator->after(function ($validator) use($check, $request) {                if ($check) {                    $validator->errors()->add('name', '用户名已存在');                }            });        }        return $validator;    }    public function role()    {        return $this->belongsTo('App\Models\Role', 'role_id');    }    public function updateToken()    {        $token = Str::random(60);        $token = hash('sha256', $token);        $this->update(['token' => $token]);    }    public function projects()    {        return $this->belongsToMany('App\Models\Project', 'project_users', 'user_id', 'project_id');    }    public function project_users()    {        return $this->hasMany('App\Models\ProjectUser', 'user_id');    }    public function project_roles()    {        return $this->belongsToMany('App\Models\ProjectRole', 'project_users', 'project_role_id', 'user_id');    }    public function getProjectRoleName()    {        $ids = ProjectUser::where('user_id', $this['id'])->pluck('project_role_id');        return ProjectRole::whereIn('id', $ids)->pluck('name')->implode(',');    }    public function getProjectName()    {        return $this->projects()->pluck('name')->implode(',');    }    public static function getOptions()    {        return self::where('id', '>', 0)->get()->toArray();    }    public function getTopRole()    {        $project_role_ids = ProjectUser::where('user_id', $this['id'])->pluck('project_role_id');        $project_role = ProjectRole::whereIn('id', $project_role_ids)->orderBy('level', 'desc')->first();        if($project_role) {            $project_role->rights = $project_role->getRights();        }        return $project_role;    }    public function getLevel($project_id)    {        $project_user = ProjectUser::where([            ['user_id', $this['id']],            ['project_id', $project_id]        ])->first();        if($project_user) {            $project_role = ProjectRole::find($project_user->project_role_id);            return $project_role ? $project_role['level'] : 0;        }        return 0;    }}
 |