RBACRoleForm.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2020-01-30 10:02
  7. */
  8. namespace backend\models\form;
  9. use Yii;
  10. use yii\rbac\Role;
  11. class RBACRoleForm extends \yii\base\Model
  12. {
  13. public $name;
  14. public $description;
  15. public $sort;
  16. private $roles = [];
  17. private $permissions = [];
  18. public function rules()
  19. {
  20. return [
  21. [['name', 'description'], 'required'],
  22. [['roles', 'permissions'], 'default', 'value' => []],
  23. [['sort'],'number']
  24. ];
  25. }
  26. public function attributeLabels()
  27. {
  28. return [
  29. "description" => Yii::t('app', 'Description'),
  30. "sort" => Yii::t('app', 'Sort'),
  31. "name" => Yii::t('app', 'Role'),
  32. "permissions" => Yii::t('app', 'Permissions'),
  33. "roles" => Yii::t('app', 'Role'),
  34. ];
  35. }
  36. public function getData()
  37. {
  38. return json_encode([
  39. 'sort' => $this->sort,
  40. ]);
  41. }
  42. public function setPermissions($permissions)
  43. {
  44. empty($permissions) && $permissions = [];
  45. $item = current($permissions);
  46. if( is_object($item) ){
  47. $newPermissions= call_user_func(function()use($permissions){
  48. $newPermissions = [];
  49. foreach($permissions as $permission){
  50. $newPermissions[] = $permission->name;
  51. }
  52. return $newPermissions;
  53. });
  54. }else {
  55. $permissions = array_flip($permissions);
  56. if (isset($permissions['0'])) {
  57. unset($permissions[0]);
  58. }
  59. $newPermissions = array_flip($permissions);
  60. }
  61. foreach ($newPermissions as $permission){
  62. $this->permissions[$permission] = $permission;
  63. }
  64. }
  65. public function getPermissions()
  66. {
  67. return $this->permissions;
  68. }
  69. public function setRoles($roles)
  70. {
  71. empty($roles) && $roles = [];
  72. $item = current($roles);
  73. if( is_object($item) ){
  74. $this->roles = call_user_func(function()use($roles){
  75. $newRoles = [];
  76. foreach($roles as $role){
  77. $newRoles[] = $role->name;
  78. }
  79. return $newRoles;
  80. });
  81. }else {
  82. $roles = array_flip($roles);
  83. if (isset($roles['0'])) {
  84. unset($roles[0]);
  85. }
  86. $roles = array_flip($roles);
  87. $this->roles = $roles;
  88. }
  89. }
  90. public function getRoles()
  91. {
  92. return $this->roles;
  93. }
  94. public function setAttributes($values, $safeOnly = true)
  95. {
  96. if( $values instanceof Role){
  97. $this->name = $values->name;
  98. $this->description = $values->description;
  99. $data = json_decode($values->data, true);
  100. $this->sort = $data['sort'];
  101. }else{
  102. parent::setAttributes($values, $safeOnly);
  103. }
  104. }
  105. }