UserRole.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /*
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\services\admin;
  10. //use fecshop\models\mysqldb\cms\StaticBlock;
  11. use Yii;
  12. use fecshop\services\Service;
  13. /**
  14. * @author Terry Zhao <2358269014@qq.com>
  15. * @since 1.0
  16. */
  17. class UserRole extends Service
  18. {
  19. public $numPerPage = 20;
  20. protected $_roleModelName = '\fecshop\models\mysqldb\admin\UserRole';
  21. protected $_roleModel;
  22. /**
  23. * language attribute.
  24. */
  25. protected $_lang_attr = [
  26. ];
  27. public function init()
  28. {
  29. parent::init();
  30. list($this->_roleModelName, $this->_roleModel) = Yii::mapGet($this->_roleModelName);
  31. }
  32. public function getPrimaryKey()
  33. {
  34. return 'id';
  35. }
  36. public function getByPrimaryKey($primaryKey)
  37. {
  38. if ($primaryKey) {
  39. $one = $this->_roleModel->findOne($primaryKey);
  40. foreach ($this->_lang_attr as $attrName) {
  41. if (isset($one[$attrName])) {
  42. $one[$attrName] = unserialize($one[$attrName]);
  43. }
  44. }
  45. return $one;
  46. } else {
  47. return new $this->_roleModelName();
  48. }
  49. }
  50. /*
  51. * example filter:
  52. * [
  53. * 'numPerPage' => 20,
  54. * 'pageNum' => 1,
  55. * 'orderBy' => ['_id' => SORT_DESC, 'sku' => SORT_ASC ],
  56. 'where' => [
  57. ['>','price',1],
  58. ['<=','price',10]
  59. * ['sku' => 'uk10001'],
  60. * ],
  61. * 'asArray' => true,
  62. * 'fetchAll' => true,
  63. * ]
  64. */
  65. public function coll($filter = '')
  66. {
  67. $query = $this->_roleModel->find();
  68. $query = Yii::$service->helper->ar->getCollByFilter($query, $filter);
  69. $coll = $query->all();
  70. if (!empty($coll)) {
  71. foreach ($coll as $k => $one) {
  72. foreach ($this->_lang_attr as $attr) {
  73. $one[$attr] = $one[$attr] ? unserialize($one[$attr]) : '';
  74. }
  75. $coll[$k] = $one;
  76. }
  77. }
  78. //var_dump($one);
  79. return [
  80. 'coll' => $coll,
  81. 'count'=> $query->limit(null)->offset(null)->count(),
  82. ];
  83. }
  84. public function remove($ids)
  85. {
  86. if (!$ids) {
  87. Yii::$service->helper->errors->add('remove id is empty');
  88. return false;
  89. }
  90. if (is_array($ids) && !empty($ids)) {
  91. foreach ($ids as $id) {
  92. $model = $this->_roleModel->findOne($id);
  93. $model->delete();
  94. }
  95. } else {
  96. $id = $ids;
  97. $model = $this->_roleModel->findOne($id);
  98. $model->delete();
  99. }
  100. return true;
  101. }
  102. /**
  103. * @param $role_id int
  104. * @return bool
  105. * 按照$role_id为条件进行删除
  106. */
  107. public function removeByRoleId($role_id){
  108. $this->_roleModel->deleteAll(['role_id' => $role_id]);
  109. return true;
  110. }
  111. /**
  112. * @param $user_id array int
  113. * @return bool
  114. * 按照$user_id为条件进行删除
  115. */
  116. public function deleteByUserIds($user_ids){
  117. $this->_roleModel->deleteAll(['in', 'user_id', $user_ids]);
  118. return true;
  119. }
  120. /**
  121. * @param $user_id int
  122. * @param $roles array, role id array.
  123. * @return boolean
  124. * 保存userId为$user_id对应的 $roles array, 不在$roles array中其他存在数据库的roles将会被删除
  125. */
  126. public function saveUserRole($user_id, $roles){
  127. $role_ids = [];
  128. if (!empty($roles)) {
  129. foreach ($roles as $k=>$role_id) {
  130. $one = $this->_roleModel->findOne([
  131. 'role_id' => $role_id,
  132. 'user_id' => $user_id,
  133. ]);
  134. $role_ids[] = $role_id;
  135. if (!$one['id']) {
  136. $one = new $this->_roleModelName;
  137. $one->role_id = $role_id;
  138. $one->user_id = $user_id;
  139. $one->save();
  140. }
  141. }
  142. if (!empty($role_ids) && is_array($role_ids)) {
  143. $this->_roleModel->deleteAll([
  144. 'and',
  145. ['user_id' => $user_id],
  146. ['not in', 'role_id', $role_ids],
  147. ]);
  148. } else {
  149. Yii::$service->helper->errors->add('You must at least select one user role');
  150. return false;
  151. }
  152. }else{
  153. Yii::$service->helper->errors->add('You must at least select one user role');
  154. return false;
  155. }
  156. return true;
  157. }
  158. }