Permission.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Log;
  6. const SUPER_ADMIN = 1; // 超级管理员,拥有所有权限
  7. const SYSTEM_ADMIN = 2; // 系统管理员,交付产品时可提供的最高管理员账号
  8. const GUEST_USER = 128; //普通用户
  9. class Permission extends Model
  10. {
  11. protected $table = "permission";
  12. public $timestamps = false;
  13. // 此时应该初始化需要的管理员账号
  14. function __construct(array $attributes = [])
  15. {
  16. parent::__construct($attributes);
  17. }
  18. /**
  19. * @param string $uid
  20. * @param int $rights
  21. * @return string
  22. */
  23. public function IsAccess(string $uid, int $rights)
  24. {
  25. // $this->where("uid",$uid)
  26. // ->where("is_del", false)
  27. // ->where("status", "normal")
  28. // ->where("role", "&");
  29. $data = DB::select("select uid from permission where uid = ? and is_del = false and status = normal and role & ? > 0;", [$uid, $rights]);
  30. if (!$data) {
  31. return "permission denied";
  32. }
  33. return $data->uid;
  34. }
  35. /**
  36. * @param string $adminUid
  37. * @param string $uid
  38. * @param string $rights
  39. * @return string
  40. */
  41. public function ModifyRole(string $adminUid, string $uid, string $rights)
  42. {
  43. // Verify that the current user has permission to modify permissions
  44. $rows = DB::select("select uid, role from permission where uid = ? and is_del = false and status = ? and role & ? > 0;", [$adminUid, "normal", SUPER_ADMIN | SYSTEM_ADMIN]);
  45. if (!$rows) {
  46. log::debug("ModifyRole with adminUid: " . $adminUid . ", uid: " . $uid . ", rights: " . $rights . " but permission denied");
  47. return "permission denied";
  48. }
  49. $data = null;
  50. foreach ($rows as $d){
  51. $data = $d;
  52. break;
  53. }
  54. if (!$data) {
  55. log::debug("ModifyRole with adminUid: " . $adminUid . ", uid: " . $uid . ", rights: " . $rights . " but permission denied");
  56. return "permission denied";
  57. }
  58. if ($data->uid < 1) {
  59. log::debug("ModifyRole with adminUid: " . $adminUid . ", uid: " . $uid . ", rights: " . $rights . " but invalid admin uid: " . $adminUid);
  60. return "invalid admin uid: " . $adminUid;
  61. }
  62. if ($data->role >= $rights) {
  63. log::debug("ModifyRole with adminUid: " . $adminUid . ", admin role: ". $data->uid . ", uid: " . $uid . ", rights: " . $rights . " but have no permission to grant higher rights");
  64. return "have no permission to grant higher rights";
  65. }
  66. // modify the user's rights
  67. $result = $this->where("uid", $uid)
  68. ->where("is_del", false)
  69. ->where("status", "normal")
  70. ->update(["role" => $rights]);
  71. if (!$result) {
  72. return "grant rights failed";
  73. }
  74. return "success";
  75. }
  76. }