Gruppenpermissions

This commit is contained in:
holger.trampe 2021-06-29 12:36:12 +02:00
parent 4a98164268
commit a34e8f0e88
9 changed files with 191 additions and 4 deletions

View File

@ -9,6 +9,7 @@ use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Controller; use OCP\AppFramework\Controller;
use OCA\Agency\Service\GroupService; use OCA\Agency\Service\GroupService;
use OCA\Agency\Service\GroupPermissionService;
use OCA\Agency\Agency\AgencyManager; use OCA\Agency\Agency\AgencyManager;
@ -20,14 +21,16 @@ class GroupController extends Controller {
protected $agencymanager; protected $agencymanager;
protected $userSession; protected $userSession;
protected $groupManager; protected $groupManager;
protected $grouppermissionservice;
use Errors; use Errors;
public function __construct(string $AppName, IRequest $request, public function __construct(string $AppName, IRequest $request,
GroupService $service, AgencyManager $agencymanager, IGroupManager $groupManager){ GroupService $service, GroupPermissionService $grouppermissionservice, AgencyManager $agencymanager, IGroupManager $groupManager){
parent::__construct($AppName, $request); parent::__construct($AppName, $request);
$this->service = $service; $this->service = $service;
$this->agencymanager = $agencymanager; $this->agencymanager = $agencymanager;
$this->groupManager = $groupManager; $this->groupManager = $groupManager;
$this->grouppermissionservice = $grouppermissionservice;
} }
/** /**
@ -81,6 +84,8 @@ class GroupController extends Controller {
$newGroup = $this->groupManager->createGroup($newGroupId); $newGroup = $this->groupManager->createGroup($newGroupId);
$newGroup->setDisplayName($groupname); $newGroup->setDisplayName($groupname);
//Create the grouppermission-element
$this->grouppermissionservice->create($newGroupId);
return true; return true;
} }
} }
@ -104,7 +109,8 @@ class GroupController extends Controller {
# If user is in the same Agency, then delete # If user is in the same Agency, then delete
# TODO: Hier noch einbauen, dass die Rechte geprüft werden! # TODO: Hier noch einbauen, dass die Rechte geprüft werden!
if(str_contains($todel->getGID(), $searchGroupId)) { if(str_contains($todel->getGID(), $searchGroupId)) {
$todel->delete(); # TODO: Hier das löschen der GroupPermission mit verwalten, wenn eine Gruppe gelöscht wird!
// $todel->delete();
$result = true; $result = true;
} }
return $result; return $result;

View File

@ -0,0 +1,24 @@
<?php
namespace OCA\Agency\Db;
use JsonSerializable;
use OCP\AppFramework\Db\Entity;
class GroupPermission extends Entity implements JsonSerializable {
protected $gid;
protected $permissions;
public function __construct() {
$this->addType('id','integer');
}
public function jsonSerialize() {
return [
'id' => $this->id,
'gid' => $this->gid,
'permissions' => $this->permissions,
];
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace OCA\Agency\Db;
use OCP\IDBConnection;
use OCP\AppFramework\Db\QBMapper;
class GroupPermissionMapper extends QBMapper {
public function __construct(IDBConnection $db) {
parent::__construct($db, 'grouppermission', GroupPermission::class);
}
public function find(int $id) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('id', $qb->createNamedParameter($id))
);
return $this->findEntity($qb);
}
public function findbygid(string $gid) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('gid', $qb->createNamedParameter($gid))
);
return $this->findEntity($qb);
}
public function remove(int $id) {
$db = $this->db->getQueryBuilder();
$db->delete($this->getTableName())
->where($db->expr()->eq('id', $query->createNamedParameter($id)));
return $this->findEntity($qb);
}
}

View File

@ -79,6 +79,28 @@
'length' => 200 'length' => 200
]); ]);
$table->setPrimaryKey(['id']);
}
if (!$schema->hasTable('grouppermission')) {
$table = $schema->createTable('grouppermission');
$table->addColumn('id', 'integer', [
'autoincrement' => true,
'notnull' => true,
]);
$table->addColumn('gid', 'string', [
'notnull' => false,
'length' => 500
]);
$table->addColumn('permissions', 'string', [
'notnull' => false,
'length' => 10000
]);
$table->setPrimaryKey(['id']); $table->setPrimaryKey(['id']);
} }
return $schema; return $schema;

View File

@ -0,0 +1,63 @@
<?php
namespace OCA\Agency\Service;
use Exception;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCA\Agency\Db\GroupPermission;
use OCA\Agency\Db\GroupPermissionMapper;
class GroupPermissionService {
private $mapper;
public function __construct(GroupPermissionMapper $mapper){
$this->mapper = $mapper;
}
private function handleException ($e) {
if ($e instanceof DoesNotExistException ||
$e instanceof MultipleObjectsReturnedException) {
throw new NotFoundException($e->getMessage());
} else {
throw $e;
}
}
//Find an Agency
public function find(int $id) {
try {
return $this->mapper->find($id);
} catch(Exception $e) {
$this->handleException($e);
}
}
//Create an Agency
public function create(string $gid, string $permission = "") {
$grouppermission = new GroupPermission();
$grouppermission->setGid($gid);
return $this->mapper->insert($grouppermission);
}
public function findbygid(string $gid){
try {
return $this->mapper->findbygid($gid);
} catch(Exception $e) {
$this->handleException($e);
}
}
public function remove(int $id){
try {
return $this->mapper->remove($id);
} catch(Exception $e) {
$this->handleException($e);
}
}
}

View File

@ -7,7 +7,6 @@
</AppContent> </AppContent>
</Content> </Content>
</template> </template>
<script> <script>
import Content from '@nextcloud/vue/dist/Components/Content' import Content from '@nextcloud/vue/dist/Components/Content'
import AppNavigation from './components/Navigation' import AppNavigation from './components/Navigation'

View File

@ -20,6 +20,7 @@
accordion="groupaccordion" accordion="groupaccordion"
role="tabpanel"> role="tabpanel">
<b-card-body> <b-card-body>
<Permission :groupid="group.gid" />
The GroupId is {{ group.gid }} <br> The GroupId is {{ group.gid }} <br>
<span v-if="group.isDefault">Ist default</span> <span v-if="group.isDefault">Ist default</span>
<span v-else>Nicht default</span> <span v-else>Nicht default</span>
@ -30,10 +31,12 @@
<script> <script>
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import Permission from './Permission'
export default { export default {
name: 'Group', name: 'Group',
components: { components: {
Permission,
}, },
// Properties of Group-Elements // Properties of Group-Elements
props: { props: {
@ -60,6 +63,7 @@ export default {
async delGroupFinal(id) { async delGroupFinal(id) {
const r = await axios.get(generateUrl('/apps/agency/delagencygroup/' + this.group.gid)) const r = await axios.get(generateUrl('/apps/agency/delagencygroup/' + this.group.gid))
console.log(r) console.log(r)
// TODO: Hier eine Mitteilung einbauen, damit der User weiß, was abging
this.$emit('updateGroupData') this.$emit('updateGroupData')
}, },
delGroup(id) { delGroup(id) {

View File

@ -0,0 +1,26 @@
<template>
<p>
Ich bin eine Permission {{ groupid }}
</p>
</template>
<script>
export default {
name: 'Permission',
components: {
},
// Properties of Group-Elements
props: {
groupid: {
type: String,
default: '',
},
},
data() {
return {
}
},
methods: {
},
}
</script>

View File

@ -66,7 +66,6 @@ export default ({
const groupResponse = await axios.get(generateUrl('/apps/agency/getagencygroups')) const groupResponse = await axios.get(generateUrl('/apps/agency/getagencygroups'))
this.groups = groupResponse.data this.groups = groupResponse.data
this.isLoading = true this.isLoading = true
console.log('Some reload happen...')
}, },
async submitHandler(data) { async submitHandler(data) {
const response = await axios.put(generateUrl('/apps/agency/addagencygroup'), data) const response = await axios.put(generateUrl('/apps/agency/addagencygroup'), data)