php不同类型用户登录,php – 我可以使用相同的表以不同的方式重构我的多个用户类型的设置吗?...

我有一个my_users表,我现在需要通过删除角色列来重构它,以支持每个用户支持多个角色.例如,我正在处理的3种用户类型是:

>战士

>裁判

>经理

因此表设置如下所示:

Users.php

use CakeDC\Users\Model\Table\UsersTable as BaseUsersTable;

class UsersTable extends BaseUsersTable

{

public function initialize(array $config)

{

parent::initialize($config);

$this->setEntityClass('Users\Model\Entity\User');

$this->belongsToMany('UserRoles', [

'through' => 'users_user_roles'

]);

$this->hasMany('UsersUserRoles', [

'className' => 'Users.UsersUserRoles',

'foreignKey' => 'user_id',

'saveStrategy' => 'replace',

]);

}

public function findRole(Query $query, array $options)

{

return $query

->innerJoinWith('UserRoles', function($q) use ($options) {

return $q->where(['role_key' => $options['role_key']]);

});

}

}

MyUsersTable.php

class MyUsersTable extends Table

{

public function initialize(array $config)

{

parent::initialize($config);

$this->setTable('my_users');

$this->setPrimaryKey('user_id');

$this->belongsTo('Users', [

'className' => 'Users.Users',

'foreignKey' => 'user_id',

]);

}

/**

* @param Cake\Event\Event $event

* @param Cake\ORM\Query $query

* @param ArrayObject $options

*/

public function beforeFind(Event $event, Query $query, \ArrayObject $options)

{

// set the role

if (defined(static::class.'::ROLE') && mb_strlen(static::ROLE) > 0) {

$role = static::ROLE;

// set user conditions

$query->innerJoinWith('Users', function($query) use ($role) {

return $query->find('role', [

'role_key' => $role,

]);

});

}

}

/**

* @param \Cake\ORM\Query $query

* @param array $options

*/

public function findByRegistrationCode(Query $query, array $options): Query

{

$query->where([

$this->aliasField('registration_no') => $options['registration_no']

]);

return $query;

}

}

FightersTable.php

use MyUsers\Model\Table\MyUsers;

class FightersTable extends MyUsersTable

{

const ROLE = 'fighter';

public function initialize(array $config)

{

parent::initialize($config);

$this->setEntityClass('Fighters\Model\Entity\Fighter');

}

/**

* @param Validator $validator

* @return Validator $validator

*/

public function validationDefault(Validator $validator): Validator

{

$validator = parent::validationDefault($validator);

$validator->allowEmpty('field');

}

}

RefereesTable.php和ManagersTable.php类似于FightersTable,但有自己的验证规则,可能有自己的特殊实体虚拟属性,而不是.

问题:是否有一种更好的结构方式,或者更具体地说是另一种方法来进行beforeFind以区分角色?如果角色的要求与用户保持1:1,我可能会做这样的事情:

$this->belongsTo('Fighters', [

'conditions' => [

'role' => 'fighter'

],

'foreignKey' => 'user_id',

'className' => 'MyUsers',

]);

我很欣赏任何有关重组的见解.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值