Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Codecrew
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
30
Merge Requests
2
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 47fe7561
authored
Sep 23, 2018
by
Tuukka Kivilahti
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature-permissions' into 'master'
Add ui for event features See merge request
!420
2 parents
9edc31eb
45ffea81
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
117 additions
and
21 deletions
code/moya-database/src/main/java/fi/codecrew/moya/model/EventFeature.java
code/moya-database/src/main/java/fi/codecrew/moya/model/EventRoleFeature.java
code/moya-database/src/main/java/fi/codecrew/moya/model/LanEvent.java
code/moya-database/src/main/java/fi/codecrew/moya/model/MoyaFeature.java
code/moya-database/src/main/java/fi/codecrew/moya/model/Role.java
code/moya-web/WebContent/eventorg/editEvent.xhtml
code/moya-web/WebContent/resources/cditools/role/edit.xhtml
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/organisation/EventOrgView.java
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/RoleView.java
code/moya-database/src/main/java/fi/codecrew/moya/model/EventFeature.java
View file @
47fe756
...
...
@@ -23,6 +23,15 @@ public class EventFeature extends GenericEntity {
@Column
(
name
=
FEATURE_COLUMN
,
nullable
=
false
)
private
MoyaFeature
feature
;
public
EventFeature
(){
super
();
}
public
EventFeature
(
LanEvent
event
,
MoyaFeature
moyaFeature
)
{
super
();
this
.
event
=
event
;
this
.
feature
=
moyaFeature
;
}
public
LanEvent
getEvent
()
{
return
event
;
}
...
...
code/moya-database/src/main/java/fi/codecrew/moya/model/EventRoleFeature.java
View file @
47fe756
...
...
@@ -29,6 +29,16 @@ public class EventRoleFeature extends GenericEntity {
@Column
(
nullable
=
false
,
name
=
"admin_permission"
)
private
boolean
admin
=
false
;
public
EventRoleFeature
()
{
super
();
}
public
EventRoleFeature
(
Role
role
,
MoyaFeature
f
)
{
super
();
this
.
role
=
role
;
this
.
feature
=
f
;
}
public
LocalDateTime
getCreated
()
{
return
created
;
...
...
code/moya-database/src/main/java/fi/codecrew/moya/model/LanEvent.java
View file @
47fe756
...
...
@@ -22,6 +22,7 @@ import java.beans.Transient;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
javax.persistence.CascadeType
;
import
javax.persistence.Column
;
...
...
@@ -400,6 +401,15 @@ public class LanEvent extends GenericEntity {
this
.
features
=
features
;
}
// Helper for storing and fetching features, as enum strings
public
List
<
String
>
getStringFeatures
(){
return
features
.
stream
().
map
(
f
->
f
.
getFeature
().
name
()).
collect
(
Collectors
.
toList
());
}
public
void
setStringFeatures
(
List
<
String
>
strings
){
features
=
strings
.
stream
().
map
(
str
->
features
.
stream
().
filter
(
f
->
f
.
getFeature
().
name
().
equals
(
str
)).
findFirst
().
orElse
(
new
EventFeature
(
this
,
MoyaFeature
.
valueOf
(
str
)))).
collect
(
Collectors
.
toList
());
}
// public List<Vip> getVips() {
// return vips;
// }
...
...
code/moya-database/src/main/java/fi/codecrew/moya/model/MoyaFeature.java
View file @
47fe756
...
...
@@ -49,12 +49,16 @@ public enum MoyaFeature {
*/
POLLS
,
FOODWAVES
,
B
B
ADGES
,
BADGES
,
/**
* Most events have some content added on the pages
* - User: View content
* - Org: No special permissions
* - Admin: Manage and create content
*/
SITE
SITE
;
public
String
getI18nKey
()
{
return
"moyaFeature."
+
name
();
}
}
code/moya-database/src/main/java/fi/codecrew/moya/model/Role.java
View file @
47fe756
...
...
@@ -105,7 +105,7 @@ public class Role extends GenericEntity {
@ManyToMany
(
mappedBy
=
"openForRoles"
)
private
List
<
Lecture
>
lectures
=
new
ArrayList
<
Lecture
>();
@OneToMany
(
mappedBy
=
"role"
)
@OneToMany
(
mappedBy
=
"role"
,
cascade
=
CascadeType
.
ALL
)
@PrivateOwned
private
List
<
EventRoleFeature
>
features
=
new
ArrayList
<>();
...
...
code/moya-web/WebContent/eventorg/editEvent.xhtml
View file @
47fe756
...
...
@@ -71,6 +71,13 @@
</p:selectOneMenu>
<p:message
for=
"defaultrole"
/>
<p:outputLabel
for=
"eventFeatures"
value=
"#{i18n['event.features']}"
/>
<p:selectManyCheckbox
layout=
"pageDirection"
id=
"eventFeatures"
value=
"#{eventorgView.event.stringFeatures}"
>
<f:selectItems
value=
"#{eventorgView.allFeatures}"
var=
"feature"
itemValue=
"#{feature.name()}"
itemLabel=
"#{i18n[feature.i18nKey]}"
/>
</p:selectManyCheckbox>
<p:message
for=
"eventFeatures"
/>
</p:panelGrid>
<p:commandButton
id=
"commitbtn"
actionListener=
"#{eventorgView.saveEvent()}"
value=
"#{i18n['event.save']}"
ajax=
"false"
/>
</p:fieldset>
...
...
code/moya-web/WebContent/resources/cditools/role/edit.xhtml
View file @
47fe756
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:h=
"http://java.sun.com/jsf/html"
xmlns:f=
"http://java.sun.com/jsf/core"
xmlns:composite=
"http://java.sun.com/jsf/composite"
xmlns:ui=
"http://java.sun.com/jsf/facelets"
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:h=
"http://java.sun.com/jsf/html"
xmlns:f=
"http://java.sun.com/jsf/core"
xmlns:composite=
"http://java.sun.com/jsf/composite"
xmlns:ui=
"http://java.sun.com/jsf/facelets"
xmlns:c=
"http://java.sun.com/jsp/jstl/core"
xmlns:p=
"http://primefaces.org/ui"
xmlns:tools=
"http://java.sun.com/jsf/composite/tools"
xmlns:role=
"http://java.sun.com/jsf/composite/tools/role"
>
...
...
@@ -14,18 +15,56 @@
<p>
<h:form
id=
"roleform"
>
<f:facet
name=
"errorMessage"
>
<h:outputText
value=
"#{i18n['nasty.user']}"
/>
<h:outputText
value=
"#{i18n['nasty.user']}"
/>
</f:facet>
<ui:include
src=
"form.xhtml"
/>
<h:commandButton
rendered=
"#{roleView.canWriteRoles}"
id=
"saverole"
value=
"#{i18n['roleView.save']}"
action=
"#{roleView.save}"
/>
<h:panelGrid
columns=
"2"
>
<h:outputText
value=
"#{i18n['role.name']}"
/>
<h:inputText
value=
"#{roleView.role.name}"
/>
<h:outputText
value=
"#{i18n['role.userSelectableRole']}"
/>
<p:selectBooleanCheckbox
value=
"#{roleView.role.userSelectableRole}"
/>
<h:outputText
value=
"#{i18n['role.parents']}"
/>
<h:selectManyCheckbox
converter=
"#{roleConverter}"
layout=
"pageDirection"
id=
"roleparents"
value=
"#{roleView.role.parents}"
>
<f:selectItems
var=
"par"
itemLabel=
"#{par.name}"
value=
"#{roleView.possibleParents}"
/>
</h:selectManyCheckbox>
<h:outputLabel
value=
"#{i18n['role.cardtemplate']}"
/>
<h:selectOneMenu
converter=
"#{cardTemplateConverter}"
value=
"#{roleView.role.cardTemplate}"
>
<f:selectItems
var=
"role"
itemLabel=
"#{role.name}"
value=
"#{cardView.templatesWithNull}"
/>
</h:selectOneMenu>
<h:outputText
value=
"#{i18n['role.permissions']}"
></h:outputText>
<p:dataTable
style=
"width: auto"
value=
"#{roleView.role.features}"
var=
"feature"
>
<p:column
headerText=
"#{i18n['feature.name']}"
>
<h:outputText
value=
"#{feature.feature.name()}"
/>
</p:column>
<p:column
headerText=
"#{i18n['feature.user_permission']}"
>
<p:selectBooleanCheckbox
value=
"#{feature.user}"
/>
</p:column>
<p:column
headerText=
"#{i18n['feature.info_permission']}"
>
<p:selectBooleanCheckbox
value=
"#{feature.info}"
/>
</p:column>
<p:column
headerText=
"#{i18n['feature.admin_permission']}"
>
<p:selectBooleanCheckbox
value=
"#{feature.admin}"
/>
</p:column>
</p:dataTable>
</h:panelGrid>
<h:commandButton
rendered=
"#{roleView.canWriteRoles}"
id=
"saverole"
value=
"#{i18n['roleView.save']}"
action=
"#{roleView.save}"
/>
</h:form>
</p>
<h:form
id=
"addmember"
>
<h:outputText
value=
"#{i18n['roleView.adduser']}"
/>
<h:outputText
value=
"#{i18n['roleView.adduser']}"
/>
<p:autoComplete
id=
"useradder"
value=
"#{roleView.addableUser}"
completeMethod=
"#{roleView.searchUser}"
converter=
"#{userConverter}"
var=
"usr"
itemValue=
"#{usr}"
itemLabel=
"#{usr.shortUserDescriptor}"
>
<p:ajax
onerror=
"location.reload(true);"
update=
":editor:addmember,:editor:memberlist"
event=
"itemSelect"
listener=
"#{roleView.addUser}"
/>
<p:autoComplete
id=
"useradder"
value=
"#{roleView.addableUser}"
completeMethod=
"#{roleView.searchUser}"
converter=
"#{userConverter}"
var=
"usr"
itemValue=
"#{usr}"
itemLabel=
"#{usr.shortUserDescriptor}"
>
<p:ajax
onerror=
"location.reload(true);"
update=
":editor:addmember,:editor:memberlist"
event=
"itemSelect"
listener=
"#{roleView.addUser}"
/>
</p:autoComplete>
</h:form>
...
...
@@ -35,44 +74,45 @@
<p:dataTable
id=
"memberlist"
value=
"#{roleView.role.users}"
var=
"usr"
>
<p:column>
<h:outputText
value=
"#{usr.login}"
/>
<h:outputText
value=
"#{usr.login}"
/>
</p:column>
<p:column>
<h:outputText
value=
"#{usr.nick}"
/>
<h:outputText
value=
"#{usr.nick}"
/>
</p:column>
<p:column>
<h:outputText
value=
"#{usr.wholeName}"
/>
<h:outputText
value=
"#{usr.wholeName}"
/>
</p:column>
<p:column>
<h:outputText
value=
"#{usr.email}"
/>
<h:outputText
value=
"#{usr.email}"
/>
</p:column>
</p:dataTable>
</p:fieldset>
<h2>
Old permissions
</h2>
<p:fieldset
legend=
"#{i18n['role.permissionheader']}"
toggleable=
"true"
collapsed=
"true"
>
<h:form
id=
"permissionform"
>
<h:commandButton
id=
"save1"
value=
"#{i18n['role.savePermissions']}"
action=
"#{roleView.savePermissions}"
/>
<h:commandButton
id=
"save1"
value=
"#{i18n['role.savePermissions']}"
action=
"#{roleView.savePermissions}"
/>
<h:dataTable
border=
"1"
id=
"bortalApps"
value=
"#{roleView.rolePermissions}"
var=
"bapp"
>
<h:column>
<f:facet
name=
"header"
>
<h:outputText
value=
"#{i18n['applicationPermission.name']}"
/>
<h:outputText
value=
"#{i18n['applicationPermission.name']}"
/>
</f:facet>
<h:outputText
value=
"#{bapp.name}"
/>
<h:outputText
value=
"#{bapp.name}"
/>
</h:column>
<h:column>
<f:facet
name=
"header"
>
<h:outputText
value=
"#{i18n['applicationPermission.description']}"
/>
<h:outputText
value=
"#{i18n['applicationPermission.description']}"
/>
</f:facet>
<h:outputText
value=
"#{i18n[bapp.key]}"
/>
<h:outputText
value=
"#{i18n[bapp.key]}"
/>
</h:column>
<h:column>
<h:selectManyCheckbox
id=
"permissions"
layout=
"pageDirection"
value=
"#{bapp.selected}"
>
<f:selectItems
value=
"#{bapp.permissions}"
var=
"per"
itemLabel=
"#{i18n[per.i18nKey]}"
/>
<f:selectItems
value=
"#{bapp.permissions}"
var=
"per"
itemLabel=
"#{i18n[per.i18nKey]}"
/>
</h:selectManyCheckbox>
</h:column>
</h:dataTable>
<h:commandButton
id=
"save2"
value=
"#{i18n['role.savePermissions']}"
action=
"#{roleView.savePermissions}"
/>
<h:commandButton
id=
"save2"
value=
"#{i18n['role.savePermissions']}"
action=
"#{roleView.savePermissions}"
/>
</h:form>
</p:fieldset>
...
...
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/organisation/EventOrgView.java
View file @
47fe756
...
...
@@ -19,6 +19,7 @@
package
fi
.
codecrew
.
moya
.
web
.
cdiview
.
organisation
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
javax.ejb.EJB
;
...
...
@@ -329,5 +330,10 @@ public class EventOrgView extends GenericCDIView {
return
permbean
.
getCurrentUser
().
isSuperadmin
();
}
public
List
<
MoyaFeature
>
getAllFeatures
()
{
return
Arrays
.
asList
(
MoyaFeature
.
values
());
}
}
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/user/RoleView.java
View file @
47fe756
...
...
@@ -122,6 +122,16 @@ public class RoleView extends GenericCDIView {
private
void
initPermissions
()
{
// New way
role
.
setFeatures
(
Arrays
.
asList
(
MoyaFeature
.
values
()).
stream
()
.
map
(
f
->
role
.
getFeatures
().
stream
()
.
filter
(
rf
->
rf
.
getFeature
().
equals
(
f
))
.
findFirst
()
.
orElse
(
new
EventRoleFeature
(
role
,
f
)))
.
sorted
(
Comparator
.
comparing
(
EventRoleFeature:
:
getFeature
))
.
collect
(
Collectors
.
toList
()));
// Old way...
logger
.
info
(
"Initializing permissions for role {}"
,
role
);
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>
rolePermissionMap
=
new
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>(
BortalApplication
.
class
);
if
(
role
.
getPermissions
()
==
null
)
{
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment