Commit fa53c2f7 by 杨昕

媒资第二期第一次提交

parent 9bc4c13e
Pipeline #10667 passed with stages
in 44 seconds
......@@ -56,6 +56,10 @@ class Handler extends ExceptionHandler
$path = $request->path();
// var_dump($exception->getMessage());
// var_dump($exception->getFile());
// var_dump($exception->getLine());
#检测当前请求是否是api路由
if (stripos($path,'api/') === 0
......
......@@ -240,6 +240,7 @@ function regex($value, $rule)
function getAdmin(){
$userStr = Session::get("user");
if (!$userStr){
$user = new stdClass();
......@@ -302,4 +303,31 @@ function generateRandomNum( $len = 32, $md5 = true ) {
$token = substr($md5token, 0, $len);
}
return $token;
}
/**
* 获取rbac统一验权
* @return string
*/
function getRbac(){
//https://api.eoffcn.com/demo/get?t=xx&sign=xx&ak=xx
//其中sign=md5(ak=$ak&t=时间戳&sk=$sk)
$rbac = getenv('rbac')?getenv('rbac'):'http://api.t.eoffcn.com';
$rbac_ak = getenv('rbac_ak')?getenv('rbac_ak'):'12485d7307bf347ee5834f98f5465aa4';
$rbac_sk = getenv('rbac_sk')?getenv('rbac_sk'):'3d279dde16162fcd4e173707d129d036';
$time = time();
$sign = md5('ak='.$rbac_ak.'&t='.$time.'&sk='.$rbac_sk);
$rbac_url = $rbac.'/rbac/api/ram?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak.'&appid=ec8747abc5dbe8288e64f327a76ac517&uid=admin';
return $rbac_url;
}
\ No newline at end of file
......@@ -10,14 +10,16 @@ namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Model\MediaCategoryModel;
use Illuminate\Support\Facades\Auth;
class IndexController extends Controller
{
function index(){
$userInfo = getAdmin();
$mediaCatgs = MediaCategoryModel::catgList();
$data['catgs'] = $mediaCatgs;
return view('admin.index');
return view('admin.index',$data);
}
}
\ No newline at end of file
......@@ -13,6 +13,9 @@ use App\Exceptions\ControllerException;
use App\Http\Controllers\Controller;
use App\Model\UserModel;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Http\Request;
......@@ -37,8 +40,16 @@ class LoginController extends Controller
throw new ControllerException(400, '昵称必须填写');
}
$user = DB::connection('mongodb') //选择使用mongodb
->collection('users')->where('name',$request->name)->where("user_type",1)->first();
//$user = DB::connection('mongodb') //选择使用mongodb
//->collection('users')->where('name',$request->name)->where("user_type",1)->first();
$user = UserModel::where([
'name' => $request->name,
'user_type' => 1,
])->first();
if (!empty($user)){
......@@ -58,10 +69,14 @@ class LoginController extends Controller
}
$id = ($user['_id'])->jsonSerialize();
$user['_id'] = $id['$oid'];
// $id = ($user['_id'])->jsonSerialize();
// $user['_id'] = $id['$oid'];
Session::put("user",json_encode($user));
// $request->session()->put('user', json_encode($user));
Auth::login($user);
// Session::put("user",json_encode($user));
return success($user);
}
......@@ -70,6 +85,7 @@ class LoginController extends Controller
} else {
return view('admin.login');
}
}
......
<?php
/**
* 权限分类管理
*/
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PrivilegeController extends Controller
{
/**
* 应用类型列表
* @param String $type_name 应用类型名称
* @return Json $result 响应结果
*/
public function index(Request $request)
{
$url = getRbac();
$data['url'] = $url;
return view('admin.privilege.list',$data);
}
}
......@@ -31,7 +31,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
......@@ -61,6 +61,8 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin.login' => \App\Http\Middleware\AdminLogin::class
];
/**
......@@ -77,5 +79,7 @@ class Kernel extends HttpKernel
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class,
];
}
<?php
namespace App\Http\Middleware;
use App\Tool\ToolFunc;
use Closure;
use Illuminate\Support\Facades\Auth;
class AdminLogin
{
use ToolFunc;
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::guard('web')->check()) {
return redirect('/web/login');
}
if (request()->isMethod('DELETE') || request()->isMethod('PUT')) {
self::getPutValueHandle($request);
}
return $next($request);
}
}
......@@ -5,6 +5,7 @@ namespace App\Http\Middleware;
use App\Exceptions\ControllerException;
use Closure;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
class ApiMiddleware
......@@ -29,10 +30,10 @@ class ApiMiddleware
return $next($request);
}
$user = getAdmin();
$ajax = $request->ajax();
$user = Auth::user();
if (empty($user->name)){
if ($ajax){
throw new ControllerException(Response::HTTP_UNAUTHORIZED);
......
......@@ -19,7 +19,7 @@ class AuthenRoute
if (is_subclass_of($this, __CLASS__)) {
#子类调用
Route::group(
['prefix' => 'web', 'middleware' => ['web'], 'namespace' => 'Web'],
['prefix' => 'web', 'middleware' => ['web','admin.login'], 'namespace' => 'Web'],
function ($router) use ($callback) {
$callback($router);
}
......
<?php
/**
* Created by PhpStorm.
* User: offcn
* Date: 2018/7/17
* Time: 11:21
* 后台管理员路由
*/
namespace App\Http\Routes\Web;
use Illuminate\Contracts\Routing\Registrar;
class ManagerRoute extends AuthenRoute
{
public function map(Registrar $router, $callback)
{
parent::map($router, function () use ($router) {
$router->resource('privilege', 'PrivilegeController');
});
}
}
......@@ -14,7 +14,7 @@ class MediaRoute extends AuthenRoute
{
public function map(Registrar $router,$callback){
parent::map($router,function() use ($router){
$router->resource('media_manager','MediaController');
$router->resource('media_model','MediaController');
});
}
......
......@@ -3,11 +3,20 @@
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class ModuleModel extends Model
class ModuleModel extends Eloquent
{
public static function getModuleList(){
$module = file_get_contents(public_path('module.json'));
public static function getModuleList($user){
if ($user['name'] == 'offcn' ){
$module = file_get_contents(public_path('module.json'));
}else{
$module = file_get_contents(public_path('media_category.json'));
}
return json_decode($module,true);
}
}
......@@ -3,11 +3,11 @@
namespace App\Model;
use App\Exceptions\DatabaseException;
use http\Env\Request;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\DB;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Jenssegers\Mongodb\Auth\User as Authenticatable;
class UserModel extends Eloquent
class UserModel extends Authenticatable
{
/**
* mongodb collection 名字
......@@ -18,11 +18,25 @@ class UserModel extends Eloquent
protected $primaryKey = '_id';
use Notifiable;
protected $fillable = [
'name', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
/*
* 获取用户列表
*/
public static function getUserList($request){
try{
$where = [];
......@@ -34,10 +48,11 @@ class UserModel extends Eloquent
->paginate(10);
foreach ( $users as $user){
$idArr = ($user['_id'])->jsonSerialize();
$user['_id'] = $idArr['$oid'];
}
// foreach ( $users as $user){
// $idArr = ($user['_id'])->jsonSerialize();
// $user['_id'] = $idArr['$oid'];
// }
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
......
......@@ -3,6 +3,9 @@
namespace App\Providers;
use App\Model\ModuleModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
......@@ -25,9 +28,10 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
view()->composer('*', function ($view) {
view()->composer('*', function ($view){
$result = ModuleModel::getModuleList();
$user = Auth::user();
$result = ModuleModel::getModuleList($user);
$view->with([
'left' => $result,
......
[{
"id": 2,
"pid": 0,
"name": "权限管理",
"icon": "&#xe623;",
"link": "/privilege",
"slug": "privilege.index",
"description": "",
"show": 1,
"sort": 1,
"key_name": "privilege",
"son": []
}, {
"id": 11,
"pid": 0,
"name": "媒体资源上传",
"icon": "&#xe60d;",
"link": "/manager",
"slug": "manager",
"description": "",
"show": 1,
"sort": 2,
"key_name": "manager_media",
"son": []
}]
\ No newline at end of file
......@@ -106,7 +106,7 @@
<a rel="nofollow" href="#" class="dropdown-item d-flex">
<div class="msg-profile"> <img src=" {{ asset('xadmin/img/avatar-1.jpg')}}" alt="..." class="img-fluid rounded-circle"></div>
<div class="msg-body">
<h3 class="h5">{{getAdmin()->name}}</h3>
<h3 class="h5">{{\Illuminate\Support\Facades\Auth::user()->name}}</h3>
</div>
</a>
<hr>
......
......@@ -17,9 +17,9 @@
<hr>
<!-- Sidebar Navidation Menus-->
<ul class="list-unstyled first">
<li><a href="/web/admin" id="home-li"><i class="icon-home"></i>首页</a></li>
<li class=""><a href="/web/admin" id="home-li"><i class="icon-home"></i>首页</a></li>
@foreach($left as $key => $item)
<li class="">
<li class="{{parse_custom_str($item['link'])}}">
{{--<a href="index.blade.php2"><i class="icon-home"></i>Home</a>--}}
@if(count($item['son'])>0)
......@@ -35,9 +35,9 @@
@else
<a href="#top{{$key}}">
<a href="#top{{$key}}" onclick="redirectTo('{{get_prefix().$item["link"]}}')">
{{--<i class="{{$item['icon']}}" style="font-size:20px;"></i>--}}
<i class="icon-home"></i>
<i class="iconfont">{!! $item['icon'] !!}</i>
<cite>{{$item['name']}}</cite>
{{--<cite>{{trans('index.'.$item['key_name'])}} </cite>--}}
{{--<i class="iconfont nav_right">&#xe697;</i>--}}
......@@ -49,8 +49,8 @@
<ul id="top{{$key}}" class="second collapse list-unstyled">
@foreach($item['son'] as $k => $child_item)
@if($child_item['show'] == 1)
<li class="{{parse_custom_str($child_item['link'])}}">
<a href="{{get_prefix().$child_item['link']}}">
<li class="{{parse_custom_str($child_item['link'])}}" onclick="redirectTo('{{get_prefix().$child_item["link"]}}')">
<a href="javascript:;" >
{{--<i class="iconfont">&#xe6a7;</i>--}}
<cite>{{$child_item['name']}}</cite>
{{--<cite>{{ trans('index.'.$child_item['key_name']) }}</cite>--}}
......@@ -68,69 +68,109 @@
</ul>
</nav>
<style>
nav.side-navbar ul a.choice {
background: linear-gradient(to left, #7c8ce4, #2196f3) !important;
border-left: 4px solid #7b4397 !important;
color: #fff !important;
}
</style>
<script>
$('nav.side-navbar ul li').removeClass('active');
function secondSiliderBar() {
/**
* 处理包含有子类的侧边栏
*/
$('nav.side-navbar > ul li').removeClass('active');
/**
* 获取当前页面url控制器路径
* @type {string}
*/
var current_url = window.location.pathname;
var li_arr = $('nav.side-navbar ul > li');
var current_url = window.location.pathname;
console.log("current_url",current_url);
var li_arr = $('nav.side-navbar ul.second > li');
var urlexist = false;
var urlexist = false;
for (var i = 0; i < li_arr.length; i++) {
//console.log($(li_arr[i]).attr('class'))
// console.log('get_prefix()',"{{get_prefix()}}"+$(li_arr[i]).attr('class')+current_url)
for (var i = 0; i < li_arr.length; i++) {
console.log($(li_arr[i]).attr('class'))
if ("{{get_prefix()}}" + "/" + $(li_arr[i]).attr('class') == current_url) {
console.log('url_controller'+i,"{{get_prefix()}}"+"/"+$(li_arr[i]).attr('class'))
if ("{{get_prefix()}}" + "/" + $(li_arr[i]).attr('class') == current_url) {
urlexist = true;
$.cookie('previous_url', $(li_arr[i]).attr('class').substr($(li_arr[i]).attr('class').lastIndexOf("/") + 1));
urlexist = true;
if (urlexist) {
$.cookie('previous_url', $(li_arr[i]).attr('class').substr($(li_arr[i]).attr('class').lastIndexOf("/") + 1));
//console.log("$(li_arr[i]).attr('class') parent",$(li_arr[i]).parent().parent().addClass('active'))
if (urlexist) {
//设置选中侧边栏背景颜色,即ul.first li背景颜色
$(li_arr[i]).parent().parent().addClass('active');
//console.log("$(li_arr[i]).attr('class') parent",$(li_arr[i]).parent().parent().addClass('active'))
//设置选中侧边箭头朝下,即ul.first > a 属性aria-expanded=true
$(li_arr[i]).parent().parent().children("a:eq(0)").attr('aria-expanded', true);
//设置选中侧边栏背景颜色,即ul.first li背景颜色
$(li_arr[i]).parent().parent().addClass('active');
//设置选中侧边展开
$(li_arr[i]).parent().addClass('show');
//设置选中侧边箭头朝下,即ul.first > a 属性aria-expanded=true
$(li_arr[i]).parent().parent().children("a:eq(0)").attr('aria-expanded', true);
//设置选择项颜色
$(li_arr[i]).children("a:eq(0)").addClass('choice');
//设置选中侧边展开
$(li_arr[i]).parent().addClass('show');
//设置选择项颜色
$(li_arr[i]).children("a:eq(0)").addClass('choice');
console.log('$(li_arr[i])', $(li_arr[i]))
console.log('$(li_arr[i])', $(li_arr[i]))
}
}
}
}
if (!urlexist) {
previous_url = $.cookie('previous_url');
$('nav.side-navbar ul li.' + previous_url + '').parent().parent().addClass('active');
$('nav.side-navbar ul li.' + previous_url + '').parent().parent().children("a:eq(0)").attr('aria-expanded', true);
$('nav.side-navbar ul li.' + previous_url + '').parent().addClass('show');
$('nav.side-navbar ul li.' + previous_url + '').children("a:eq(0)").addClass('choice');
}
if (current_url == '/web/admin') {
$('a').removeClass('choice')
$('a').attr('aria-expanded', false)
$('ul').removeClass('show');
$('li').removeClass('active');
console.log("1111111111111111",urlexist)
if (!urlexist) {
previous_url = $.cookie('previous_url');
$('nav.side-navbar ul li.' + previous_url + '').parent().parent().addClass('active');
$('nav.side-navbar ul li.' + previous_url + '').parent().parent().children("a:eq(0)").attr('aria-expanded', true);
$('nav.side-navbar ul li.' + previous_url + '').parent().addClass('show');
$('nav.side-navbar ul li.' + previous_url + '').children("a:eq(0)").addClass('choice');
}
if (current_url == '/web/admin') {
$('a').removeClass('choice')
$('a').attr('aria-expanded', false)
$('ul').removeClass('show');
$('li').removeClass('active');
$('#home-li').addClass('choice');
}
}
$('#home-li').addClass('choice');
secondSiliderBar();
function redirectTo(url){
var category_id = $.cookie('media_category_id');
window.location.href = url + '?category_id=' +category_id;
}
</script>
<!DOCTYPE html>
<html>
@include('admin.common.commonMedia')
<body>
<!--====================================================
MAIN NAVBAR
======================================================-->
@include('admin.common.header')
<header class="header">
<nav class="navbar navbar-expand-lg ">
<div class="search-box">
<button class="dismiss"><i class="icon-close"></i></button>
<form id="searchForm" action="#" role="search">
<input type="search" placeholder="Search Now" class="form-control">
</form>
</div>
<div class="container-fluid ">
<div class="navbar-holder d-flex align-items-center justify-content-between">
<div class="navbar-header">
<a href="/web/admin" class="navbar-brand">
<div class="brand-text brand-big hidden-lg-down">
<h4>中公教育-媒资</h4>
{{--<img src=" {{ asset('xadmin/img/logo-white.png')}}" alt="Logo" style="width: 180px;height: auto;" class="img-fluid">--}}
</div>
<div class="brand-text brand-small"><img src=" {{ asset('xadmin/img/logo-icon.pn')}}g" alt="Logo" class="img-fluid"></div>
</a>
</div>
</div>
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
<li class="nav-item dropdown"><a id="profile" class="nav-link logout" data-target="#" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><img src=" {{ asset('xadmin/img/avatar-1.jpg')}}" alt="..." class="img-fluid rounded-circle" style="height: 30px; width: 30px;"></a>
<ul aria-labelledby="profile" class="dropdown-menu profile">
<li>
<a rel="nofollow" href="#" class="dropdown-item d-flex">
<div class="msg-profile"> <img src=" {{ asset('xadmin/img/avatar-1.jpg')}}" alt="..." class="img-fluid rounded-circle"></div>
<div class="msg-body">
<h3 class="h5">{{\Illuminate\Support\Facades\Auth::user()->name}}</h3>
</div>
</a>
<hr>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-power-off"></i>切换店铺</div>
</div>
</a>
</li>
<li>
<a rel="nofollow" href="/web/logout" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-power-off"></i>退出</div>
</div>
</a>
</li>
</ul>
</li>
</ul>
</div>
</nav>
</header>
<!--====================================================
PAGE CONTENT
......@@ -15,97 +69,51 @@
<div class="page-content d-flex align-items-stretch">
<!--***** SIDE NAVBAR *****-->
@include('admin.common.left')
{{--@include('admin.common.left')--}}
<div class="content-inner">
<div class="content-inner" style="width: 100%;">
<div class="row" id="report4">
<div class="col-md-3" onclick="important_task('/web/pending_news')">
<div class="card text-center social-bottom sb-gp">
<i class="fa fa-google-plus"></i>
<div>0 </div>
<p>我的待办</p>
</div>
</div>
<div class="col-md-3">
<div class="card text-center social-bottom sb-fb">
<i class="fa fa-facebook"></i>
<div>100 +</div>
<p>普通会员</p>
</div>
</div>
<div class="col-md-3">
<div class="card text-center social-bottom sb-tw">
<i class="fa fa-twitter"></i>
<div>100 +</div>
<p>管理员</p>
</div>
</div>
<div class="col-md-3">
<div class="card text-center social-bottom sb-in">
<i class="fa fa-instagram"></i>
<div>500 +</div>
<p>已发布新闻</p>
@foreach($catgs as $catg)
<div class="col-md-4" onclick="important_task('/web/member','{{$catg["media_category_id"]}}')">
<div class="card text-center social-bottom sb-in">
<i class="fa fa-instagram"></i>
{{--<div>500 +</div>--}}
<p>{{$catg['name']}}</p>
</div>
</div>
</div>
@endforeach
</div>
<!--***** REPORT-2 *****-->
<div class="row" id="report2">
<div class="col-md-6">
<div class="card card-c1">
<div class="card-header card-chart" data-background-color="green">
<canvas class="ct-chart" id="myChart1" height="190"></canvas>
</div>
<div class="card-content">
<h4 class="title">Daily Sales</h4>
<p class="category">
<span class="text-success"><i class="fa fa-long-arrow-up"></i> 55% </span> increase in today sales.</p>
</div>
<div class="card-footer">
<div class="stats">
<i class="fa fa-clock-o"></i> updated 4 minutes ago
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card card-c1">
<div class="card-header card-chart" data-background-color="orange">
<canvas class="ct-chart" id="myChart2" height="190"></canvas>
</div>
<div class="card-content">
<h4 class="title">Email Subscriptions</h4>
<p class="category">Last Campaign Performance</p>
</div>
<div class="card-footer">
<div class="stats">
<i class="fa fa-clock-o"></i> campaign sent 2 days ago
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--Global Javascript -->
@include('admin.common.foot')
<script src="{{ asset('xadmin/js/popper/popper.min.js')}}"></script>
<script src="{{ asset('xadmin/js/tether.min.js')}}"></script>
<script src="{{ asset('xadmin/js/bootstrap.min.js')}}"></script>
<script src="{{ asset('xadmin/js/jquery.cookie.js')}}"></script>
<script src="{{ asset('xadmin/js/chart.min.js')}}"></script>
<script src="{{ asset('xadmin/js/front.js')}}"></script>
<link rel="stylesheet" href="{{ asset('xadmin/icon/iconfont.css')}}">
<!--Core Javascript -->
<script src="{{ asset('xadmin/js/mychart.js')}}"></script>
<script>
function important_task(url){
window.location.href = url;
function important_task(url,category_id){
$.cookie('media_category_id',category_id)
window.location.href = url+'?category_id='+category_id;
}
// var mainContent = document.getElementById('mainContent');
// mainContent.src = "http://baidu.com.cn"//嵌套网址
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
@include('admin.common.commonMedia')
<body>
<!--====================================================
MAIN NAVBAR
======================================================-->
@include('admin.common.header')
<!--====================================================
PAGE CONTENT
======================================================-->
<div class="page-content d-flex align-items-stretch">
<!--***** SIDE NAVBAR *****-->
@include('admin.common.left')
<div class="content-inner chart-cont">
<iframe id="mainContent" width="100%" height="100%"></iframe>
</div>
</div>
<!--Global Javascript -->
@include('admin.common.foot')
<!--Core Javascript -->
<link rel="stylesheet" href="{{ asset('xadmin/extra/jqueryConfirm/css/jquery-confirm.css')}}">
<script src="{{ asset('xadmin/extra/jqueryConfirm/js/jquery-confirm.min.js')}}"></script>
{{--<link rel="stylesheet" href="{{ asset('xadmin/extra/toast/css/toast.css')}}">--}}
<script>
setTimeout(function () {
var mainContent = document.getElementById('mainContent');
mainContent.src = "{{$url}}"//嵌套网址
},1000)
</script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment