Browse Source

周五前完成的版本,没有对权限部分具体实现

DESKTOP-C21C1Q8\tangs 6 years ago
parent
commit
6ee5d5feec

+ 0 - 1
.gitignore

@@ -12,4 +12,3 @@ yarn-error.log
 .idea/
 */.idea/
 repair-lite.iml
-storage/logs/*.log

+ 96 - 0
app/Http/Controllers/ActionBarController.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
+use Mockery\Exception;
+use Illuminate\Support\Facades\Log;
+use PhpParser\Node\Expr\AssignOp\Mod;
+
+class ActionBarController extends Controller
+{
+    public function AddActionBar(Request $request)
+    {
+        $params = [];
+        $params["owner_id"] = $request->input("owner_id");
+        $params["parent"] = $request->input("parent");
+        $params["level"] = $request->input("level");
+        $params["icon"] = $request->input("icon");
+        $params["link_type"] = $request->input("link_type");
+        $params["link"] = $request->input("link");
+
+        $bar = new Models\ActionBar();
+        $result = $bar->AddActionBar($params);
+        if ($result != "success") {
+            Log::debug($result);
+        }
+        return $result;
+    }
+
+    public function ModifyActionBar(Request $request)
+    {
+        $params = [];
+        $params["id"] = $request->input("id");
+        $params["owner_id"] = $request->input("owner_id");
+        $params["parent"] = $request->input("parent");
+        $params["level"] = $request->input("level");
+        $params["icon"] = $request->input("icon");
+        $params["link_type"] = $request->input("link_type");
+        $params["link"] = $request->input("link");
+        $params["name"] = $request->input("name");
+        $params["description"] = $request->input("description");
+
+        $bar = new Models\ActionBar();
+        $result = $bar->ModifyActionBar($params);
+        return $result;
+    }
+
+    public function DeleteActionBar(Request $request)
+    {
+        $params = [];
+        $bid = $request->input("id");
+        $params["id"] = $bid;
+
+        $bar = new Models\ActionBar();
+        $result = $bar->DeleteActionBar($params);
+        return $result;
+    }
+
+    public function LoadActionBar(Request $request)
+    {
+        $params = [];
+        $uid = $request->input("uid");
+        $params["uid"] = $uid;
+
+        $bar = new Models\ActionBar();
+        $result = $bar->LoadActionBar($params);
+        return "success";
+    }
+}
+
+
+// 这个class的方法需要在中间件里加上权限判断,管理员才能执行
+class UserActionBar extends Controller
+{
+    public function AddUserActionBar(Request $request)
+    {
+        $uid = $request->input("uid");
+        $barId = $request->input("barId");
+
+        $userActionBar = new Models\UserActionBar();
+        $userActionBar->AddUserActionBar($uid, $barId);
+        return "success";
+    }
+
+    public function RemoveActionBar(Request $request)
+    {
+        $uid = $request->input("uid");
+        $barId = $request->input("barId");
+
+        $userActionBar = new Models\UserActionBar();
+        $userActionBar->RemoveUserActionBar($uid, $barId);
+        return "success";
+    }
+}

+ 70 - 0
app/Http/Controllers/GroupController.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models;
+use Illuminate\Http\Request;
+use Mockery\Exception;
+use Illuminate\Support\Facades\Log;
+
+class GroupController extends Controller
+{
+    public function CreateGroup(Request $request)
+    {
+        $params = [];
+        $params["name"] = $request->input("name");
+        $params["description"] = $request->input("description");
+        $params["icon"] = $request->input("icon");
+
+        $group = new Models\Group();
+        $group->CreateGroup($params);
+        // todo 这里应该返回group的json数据
+        return "success";
+    }
+
+    public function ModifyGroup(Request $request)
+    {
+        $params = [];
+        $params["gid"] = $request->input("gid");
+        $params["name"] = $request->input("name");
+        $params["description"] = $request->input("description");
+        $params["icon"] = $request->input("icon");
+
+        $group = new Models\Group();
+        $group->ModifyGroup($params);
+        return "success";
+    }
+
+    public function DeleteGroup(Request $request)
+    {
+        $params = [];
+        $params["gid"] = $request->input("gid");
+
+        $group = new Models\Group();
+        $group->DeleteGroup($params);
+        return "success";
+    }
+}
+
+class GroupUserController extends Controller
+{
+    public function GroupAddUser(Request $request)
+    {
+        $gid = $request->input("gid");
+        $uid = $request->input("uid");
+
+        $groupUser = new Models\GroupUser();
+        $groupUser->GroupAddUser($gid,$uid);
+        return "success";
+    }
+
+    public function GroupRemoveUser(Request $request)
+    {
+        $gid = $request->input("gid");
+        $uid = $request->input("uid");
+
+        $groupUser = new Models\GroupUser();
+        $groupUser->GroupRemoveUser($gid,$uid);
+        return "success";
+    }
+}

+ 2 - 2
app/Http/Controllers/PermissionController.php

@@ -22,9 +22,9 @@ class PermissionController extends Controller
         $adminUser = 1;
 
         log::debug("GrantPrivilege received admin uid " . $adminUser . ", uid " . $uid . ", rights " . $rights);
-        $permisson = new Models\Permission();
+        $permission = new Models\Permission();
         try {
-            $result = $permisson->ModifyRole($adminUser, $uid, $rights);
+            $result = $permission->ModifyRole($adminUser, $uid, $rights);
             if ($result != "success"){
                 return $result;
             }

+ 221 - 0
app/Models/ActionBar.php

@@ -0,0 +1,221 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+
+const LINK_TYPE_URL = "url";
+
+
+class ActionBar extends Model
+{
+    protected $table = "action_bars";
+    public $timestamps = false;
+
+    /**
+     * @param array $params
+     * owner_id 拥有者用户的id,0表示数据模板
+     * parent ActionBar 的上一级id
+     * level 表示当前是第几级,冗余字段
+     * icon ActionBar的图标
+     * link_type ActionBar的时间类型,当期只有url跳转
+     * link 根据link_type需要的数据,当前为url,也可以是页面上的某个id
+     * @return string
+     */
+    public function AddActionBar(array $params)
+    {
+        $this->parent = $params["parent"]; // default 0
+        $this->level = $params["level"];
+        $this->icon = $params["icon"];
+        $link_type = $params["link_type"];
+        $this->link = $params["link"];
+        $this->name = $params["name"];
+        $this->description = $params["description"];
+        $this->status = "normal";
+
+        if ($this->parent < 0) {
+            return "invalid parent: " . $this->parent;
+        }
+        if ($this->level < 0) {
+            return "invalid level: " . $this->level;
+        }
+        $this->link_type = trim($link_type);
+        if ($this->link_type == "") {
+            $this->link_type = LINK_TYPE_URL;
+        }
+
+        $result = $this->save();
+        if ($result) {
+            Log::debug("AddActionBar success with params: " . json_encode($params));
+            return "success";
+        } else {
+            Log::error("AddActionBar failed with params: " . json_encode($params));
+            return "AddActionBar but fail";
+        }
+    }
+
+
+    /**
+     * 根据菜单的id更新一个菜单内容
+     *
+     * @param array $params
+     * @return string
+     */
+    public function ModifyActionBar(array $params)
+    {
+        $update = [];
+        $id = $params["id"];
+        if ($id == "") {
+            return "invalid id";
+        }
+        if ($params["parent"] > 0) {
+            $update["parent"] = $params["parent"];
+        }
+        if ($params["level"] > 0) {
+            $update["level"] = $params["level"];
+        }
+        if (strlen($params["icon"]) > 0) {
+            $update["icon"] = $params["icon"];
+        }
+        if (strlen($params["link_type"]) > 0) {
+            $update["link_type"] = $params["link_type"];
+        }
+        if (strlen($params["link"]) > 0) {
+            $update["link"] = $params["link"];
+        }
+        if (strlen($params["name"]) > 0) {
+            Log::debug("name is " . $params["name"]);
+            $update["name"] = $params["name"];
+        }
+        if (strlen($params["description"]) > 0) {
+            $update["description"] = $params["description"];
+        }
+        if (count($update) == 0) {
+            return "nothing to update";
+        }
+
+        $num = $this->where("id", $id)
+            ->where("status", "normal")
+            ->where("is_del", false)
+            ->update($update);
+        return "success";
+    }
+
+    // todo.
+
+    /**
+     * 删除一个菜单项目,这里存在一个问题,就是如果删除上层的菜单,下层的菜单也应该都被删掉。先留空。
+     *
+     * @param array $params
+     * @return string
+     */
+    public function DeleteActionBar(array $params)
+    {
+        $id = $params["id"];
+        if ($id == "") {
+            return "invalid id";
+        }
+        $num = $this->where("id", $id)
+            ->where("status", "normal")
+            ->where("is_del", false)
+            ->update(["is_del" => true]);
+        return "success";
+    }
+
+    /**
+     * 查出当前用户可以访问的所有action_bar的信息
+     *
+     * @param array $params
+     * @return array
+     */
+    public function ListActionBar(array $params)
+    {
+        $uid = $params["uid"];
+
+        // 收集当前用户有权限的bar_id
+        $userActionBar = new UserActionBar();
+        $bar_ids = $userActionBar->ListActionBarIds($uid);
+        if (count($bar_ids) == 0) {
+            return [];
+        }
+
+        // 查出bars的信息
+        $result = $this->select("id", "parent", "level", "name", "description", "icon", "link_type", "link")
+            ->where("id", $bar_ids)
+            ->where("status", "normal")
+            ->where("is_del", false)
+            ->all();
+        return $result;
+    }
+}
+
+class UserActionBar extends Model
+{
+    protected $table = "user_action_bars";
+    public $timestamps = false;
+
+    public function AddUserActionBar($uid, $barId)
+    {
+        if ($uid == "") {
+            return "empty user id";
+        }
+        if ($barId == "") {
+            return "empty action bar id";
+        }
+
+        //INSERT INTO demo_in(a,b,c) SELECT 123, 2, 4 FROM DUAL WHERE NOT EXISTS(SELECT c FROM demo_in WHERE c = 4);
+        $sql = sprintf("insert into user_action_bars(user_id, bar_id) 
+                                    select ?, ? from temp_uab 
+                                    where not exists(
+                                    select id from user_action_bars
+                                    where user_id = ? and bar_id = ? and is_del = false);");
+
+        $result = DB::insert($sql, [$uid, $barId, $uid, $barId]);
+        Log::debug("AddUserActionBar " . $result);
+        return "success";
+    }
+
+    public function RemoveUserActionBar($uid, $barId)
+    {
+        if ($uid == "") {
+            return "empty user id";
+        }
+        if ($barId == "") {
+            return "empty action bar id";
+        }
+
+        $data = $this->where("user_id", $uid)
+            ->where("bar_id", $barId)
+            ->where("is_del", false)
+            ->first();
+        if (!$data){
+            return "nothing to remove";
+        }
+        $this->is_del = true;
+        $this->save();
+        return "success";
+    }
+
+    /**
+     * @param $uid
+     * @return array
+     */
+    public function ListActionBarIds($uid)
+    {
+        $bars = $this->select("bar_id")
+            ->where("user_id", $uid)
+            ->where("status", "normal")
+            ->where("is_del", false)
+            ->get();
+        if (count($bars) == 0) {
+            return [];
+        }
+        $bar_ids = [];
+        foreach ($bar_ids as $bar_id) {
+            array_push($bar_ids, $bar_id->bar_id);
+        }
+        return $bar_ids;
+    }
+}

+ 6 - 0
app/Models/Common.php

@@ -0,0 +1,6 @@
+<?php
+
+namespace App\Models;
+
+const STATUS_NORMAL = "normal";
+//define(STATUS_NORMAL, "normal", true);

+ 164 - 0
app/Models/Group.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\Log;
+use PhpParser\Node\Expr\AssignOp\Mod;
+
+
+class Group extends Model
+{
+    protected $table = groups;
+    public $timestamps = false;
+
+    /**
+     * 创建一个用户组,组名必填
+     *
+     * @param array $params
+     * @return string
+     */
+    public function CreateGroup(array $params)
+    {
+        $this->name = $params["name"];
+        $this->description = $params["description"];
+        $this->icon = $params["icon"];
+        $this->status = "normal";
+
+        if ($this->name == "") {
+            return "empty group name";
+        }
+
+        $this->save();
+        return "success";
+    }
+
+    public function ModifyGroup(array $params)
+    {
+        $update = [];
+        $gid = $params["gid"];
+        if ($gid == "") {
+            return "empty group id";
+        }
+        if ($params["name"] != "") {
+            $update["name"] = $params["name"];
+        }
+        if ($params["description"] != "") {
+            $update["description"] = $params["description"];
+        }
+        if ($params["icon"] != "") {
+            $update["icon"] = $params["icon"];
+        }
+        if (count($update) == 0) {
+            return "nothing to update";
+        }
+
+        $this->where("id", $gid)
+            ->where("status", "normal")
+            ->where("is_del", false)
+            ->update($update);
+        return "success";
+    }
+
+    public function DeleteGroup(array $params)
+    {
+        $gid = $params["gid"];
+        if ($gid == "") {
+            return "empty group id";
+        }
+        $this->where("id", $gid)
+            ->where("is_del", false)
+            ->update(["is_del" => true]);
+        return "success";
+    }
+
+
+//    public function LoadGroup(array $params){
+//        $gid = $params["gid"];
+//        if ($gid == ""){
+//            return"empty group id";
+//        }
+//    }
+
+    public function ListGroup(array $params)
+    {
+        $uid = $params["uid"];
+        $groupUser = new GroupUser();
+        $groupIds = $groupUser->ListGroupIds($uid);
+        if (count($groupIds) == 0) {
+            return [];
+        }
+
+        //
+        $result = $this->select("id", "name", "description", "icon", "status")
+            ->where("id", $groupIds)
+            ->where("is_del", false)
+            ->all();
+        return $result;
+    }
+}
+
+
+class GroupUser extends Model
+{
+    protected $table = "group_user";
+    public $timestamps = false;
+
+
+    /**
+     * todo
+     * 这里需要分页,也可能需要根据群组的状态排序,后面再处理
+     * 列出用户相关的群组
+     *
+     * @param $uid
+     * @return array
+     */
+    public function ListGroupIds($uid)
+    {
+        $groups = $this->select("group_id")
+            ->where("user_id", $uid)
+            ->where("is_del", false)
+            ->all();
+        $group_ids = [];
+        foreach ($groups as $group) {
+            array_push($group_ids, $group->group_id);
+        }
+        return $group_ids;
+    }
+
+    public function GroupAddUser($gid, $uid)
+    {
+        if ($gid == "") {
+            return "empty group id";
+        }
+        if ($uid == "") {
+            return "empty user id";
+        }
+
+        $this->group_id = $gid;
+        $this->user_id = $uid;
+        $this->status = "status";
+
+        $this->save();
+    }
+
+    public function GroupRemoveUser($gid, $uid)
+    {
+        if ($gid == "") {
+            return "empty group id";
+        }
+        if ($uid == "") {
+            return "empty user id";
+        }
+//        $this->group_id = $gid;
+//        $this->user_id = $uid;
+
+        $this->where("group_id", $gid)
+            ->where("user_id", $uid)
+            ->where("is_del", false)
+            ->update(["is_del" => true]);
+        return "success";
+    }
+
+
+}

+ 0 - 1
app/Models/Permission.php

@@ -85,6 +85,5 @@ class Permission extends Model
         }
         return "success";
     }
-
 }
 

+ 47 - 1
app/Models/User.php

@@ -7,6 +7,52 @@ use Illuminate\Database\Eloquent\Model;
 class User extends Model
 {
 
-    protected $table = "user";
+    protected $table = "users";
     public $timestamps = false;
+
+    public function CreateUser(array $params)
+    {
+        // todo 是否需要保证用户名唯一的功能
+        $this->username = $params["username"];
+        $this->password = $params["password"];
+        $this->nickname = $params["nickname"];
+        $this->icon = $params["icon"];
+        $this->tel = $params["tel"];
+        $this->email = $params["email"];
+        $this->status = "normal";
+
+        if ($this->username == "" || $this->password == "") {
+            return "empty username or password";
+        }
+        // todo 这里需要对密码加密
+        $this->save();
+        return "success";
+    }
+
+    public function ModifyUser(array $params)
+    {
+
+    }
+
+    public function DeleteUser($uid)
+    {
+
+    }
+
+    public function ListUser($page, $pageCount)
+    {
+
+    }
+}
+
+class UserRole extends Model
+{
+    /**
+     * 分配角色
+     *
+     */
+    public function AssignRole(){
+
+    }
 }
+

+ 0 - 31
app/Models/UserTest.php

@@ -1,31 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: tangs
- * Date: 2019/3/4
- * Time: 11:17
- */
-
-//namespace App\Models;
-
-require_once ("pp.php");
-use PHPUnit\Framework\TestCase;
-
-class UserTest extends TestCase
-{
-    function __construct() {
-        parent::__construct();
-        print "In UserTest constructor\n";
-    }
-
-    public function testRun(){
-
-        $u = new \App\Models\P();
-        $name = $u->getConnectionName();
-        echo ($name);
-
-
-        $users = $u->getConnection()->table("user")->where("id", "=", 1)->get();
-//        $u->save();
-    }
-}

+ 15 - 0
app/test/array.php

@@ -0,0 +1,15 @@
+<?php
+
+
+class T {
+    public function A(array $a){
+        echo ($a["halo"]);
+    }
+}
+
+$arr = ["halo" => "abc"];
+
+$t = new T();
+$t->A($arr);
+
+echo (json_encode($arr));

+ 18 - 6
app/test/c.php

@@ -15,10 +15,22 @@
 //$b = new \App\test\b();
 //$b->bFun();
 
-//use App\spaceA;
-require_once ("a.php");
+////use App\spaceA;
+//require_once ("a.php");
+//
+////$aaa = new spaceA\a();
+////spl_autoload_register();
+//$aaa = new \App\spaceA\a();
+//$aaa->aFun();
+
+
+$data =array(0 =>
+  stdClass::__set_state(array(
+      'uid' => 1,
+      'role' => 3,
+  )),
+);
+
+$arrayData = (array($data));
 
-//$aaa = new spaceA\a();
-//spl_autoload_register();
-$aaa = new \App\spaceA\a();
-$aaa->aFun();
+//echo ($data[0]);

+ 6 - 0
routes/web.php

@@ -29,3 +29,9 @@ Route::get('/', function () {
 Route::get("addUser", "UserController@AddUser");
 Route::get("delUser", "UserController@DelUser");
 Route::get("grantPrivilege", "PermissionController@GrantPrivilege");
+
+// action bar
+Route::get("addActionBar", "ActionBarController@AddActionBar");
+Route::get("modifyActionBar", "ActionBarController@ModifyActionBar");
+Route::get("deleteActionBar", "ActionBarController@DeleteActionBar");
+Route::get("loadActionBar", "ActionBarController@LoadActionBar");