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 {
...
@@ -23,6 +23,15 @@ public class EventFeature extends GenericEntity {
@Column
(
name
=
FEATURE_COLUMN
,
nullable
=
false
)
@Column
(
name
=
FEATURE_COLUMN
,
nullable
=
false
)
private
MoyaFeature
feature
;
private
MoyaFeature
feature
;
public
EventFeature
(){
super
();
}
public
EventFeature
(
LanEvent
event
,
MoyaFeature
moyaFeature
)
{
super
();
this
.
event
=
event
;
this
.
feature
=
moyaFeature
;
}
public
LanEvent
getEvent
()
{
public
LanEvent
getEvent
()
{
return
event
;
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 {
...
@@ -29,6 +29,16 @@ public class EventRoleFeature extends GenericEntity {
@Column
(
nullable
=
false
,
name
=
"admin_permission"
)
@Column
(
nullable
=
false
,
name
=
"admin_permission"
)
private
boolean
admin
=
false
;
private
boolean
admin
=
false
;
public
EventRoleFeature
()
{
super
();
}
public
EventRoleFeature
(
Role
role
,
MoyaFeature
f
)
{
super
();
this
.
role
=
role
;
this
.
feature
=
f
;
}
public
LocalDateTime
getCreated
()
{
public
LocalDateTime
getCreated
()
{
return
created
;
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;
...
@@ -22,6 +22,7 @@ import java.beans.Transient;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
javax.persistence.CascadeType
;
import
javax.persistence.CascadeType
;
import
javax.persistence.Column
;
import
javax.persistence.Column
;
...
@@ -400,6 +401,15 @@ public class LanEvent extends GenericEntity {
...
@@ -400,6 +401,15 @@ public class LanEvent extends GenericEntity {
this
.
features
=
features
;
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() {
// public List<Vip> getVips() {
// return vips;
// return vips;
// }
// }
...
...
code/moya-database/src/main/java/fi/codecrew/moya/model/MoyaFeature.java
View file @
47fe756
...
@@ -49,12 +49,16 @@ public enum MoyaFeature {
...
@@ -49,12 +49,16 @@ public enum MoyaFeature {
*/
*/
POLLS
,
POLLS
,
FOODWAVES
,
FOODWAVES
,
B
B
ADGES
,
BADGES
,
/**
/**
* Most events have some content added on the pages
* Most events have some content added on the pages
* - User: View content
* - User: View content
* - Org: No special permissions
* - Org: No special permissions
* - Admin: Manage and create content
* - 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 {
...
@@ -105,7 +105,7 @@ public class Role extends GenericEntity {
@ManyToMany
(
mappedBy
=
"openForRoles"
)
@ManyToMany
(
mappedBy
=
"openForRoles"
)
private
List
<
Lecture
>
lectures
=
new
ArrayList
<
Lecture
>();
private
List
<
Lecture
>
lectures
=
new
ArrayList
<
Lecture
>();
@OneToMany
(
mappedBy
=
"role"
)
@OneToMany
(
mappedBy
=
"role"
,
cascade
=
CascadeType
.
ALL
)
@PrivateOwned
@PrivateOwned
private
List
<
EventRoleFeature
>
features
=
new
ArrayList
<>();
private
List
<
EventRoleFeature
>
features
=
new
ArrayList
<>();
...
...
code/moya-web/WebContent/eventorg/editEvent.xhtml
View file @
47fe756
...
@@ -71,6 +71,13 @@
...
@@ -71,6 +71,13 @@
</p:selectOneMenu>
</p:selectOneMenu>
<p:message
for=
"defaultrole"
/>
<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:panelGrid>
<p:commandButton
id=
"commitbtn"
actionListener=
"#{eventorgView.saveEvent()}"
value=
"#{i18n['event.save']}"
ajax=
"false"
/>
<p:commandButton
id=
"commitbtn"
actionListener=
"#{eventorgView.saveEvent()}"
value=
"#{i18n['event.save']}"
ajax=
"false"
/>
</p:fieldset>
</p:fieldset>
...
...
code/moya-web/WebContent/resources/cditools/role/edit.xhtml
View file @
47fe756
<?xml version='1.0' encoding='UTF-8' ?>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
"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"
>
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 @@
...
@@ -14,18 +15,56 @@
<p>
<p>
<h:form
id=
"roleform"
>
<h:form
id=
"roleform"
>
<f:facet
name=
"errorMessage"
>
<f:facet
name=
"errorMessage"
>
<h:outputText
value=
"#{i18n['nasty.user']}"
/>
<h:outputText
value=
"#{i18n['nasty.user']}"
/>
</f:facet>
</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>
</h:form>
</p>
</p>
<h:form
id=
"addmember"
>
<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:autoComplete
id=
"useradder"
value=
"#{roleView.addableUser}"
completeMethod=
"#{roleView.searchUser}"
converter=
"#{userConverter}"
var=
"usr"
itemValue=
"#{usr}"
<p:ajax
onerror=
"location.reload(true);"
update=
":editor:addmember,:editor:memberlist"
event=
"itemSelect"
listener=
"#{roleView.addUser}"
/>
itemLabel=
"#{usr.shortUserDescriptor}"
>
<p:ajax
onerror=
"location.reload(true);"
update=
":editor:addmember,:editor:memberlist"
event=
"itemSelect"
listener=
"#{roleView.addUser}"
/>
</p:autoComplete>
</p:autoComplete>
</h:form>
</h:form>
...
@@ -35,44 +74,45 @@
...
@@ -35,44 +74,45 @@
<p:dataTable
id=
"memberlist"
value=
"#{roleView.role.users}"
var=
"usr"
>
<p:dataTable
id=
"memberlist"
value=
"#{roleView.role.users}"
var=
"usr"
>
<p:column>
<p:column>
<h:outputText
value=
"#{usr.login}"
/>
<h:outputText
value=
"#{usr.login}"
/>
</p:column>
</p:column>
<p:column>
<p:column>
<h:outputText
value=
"#{usr.nick}"
/>
<h:outputText
value=
"#{usr.nick}"
/>
</p:column>
</p:column>
<p:column>
<p:column>
<h:outputText
value=
"#{usr.wholeName}"
/>
<h:outputText
value=
"#{usr.wholeName}"
/>
</p:column>
</p:column>
<p:column>
<p:column>
<h:outputText
value=
"#{usr.email}"
/>
<h:outputText
value=
"#{usr.email}"
/>
</p:column>
</p:column>
</p:dataTable>
</p:dataTable>
</p:fieldset>
</p:fieldset>
<h2>
Old permissions
</h2>
<p:fieldset
legend=
"#{i18n['role.permissionheader']}"
toggleable=
"true"
collapsed=
"true"
>
<p:fieldset
legend=
"#{i18n['role.permissionheader']}"
toggleable=
"true"
collapsed=
"true"
>
<h:form
id=
"permissionform"
>
<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:dataTable
border=
"1"
id=
"bortalApps"
value=
"#{roleView.rolePermissions}"
var=
"bapp"
>
<h:column>
<h:column>
<f:facet
name=
"header"
>
<f:facet
name=
"header"
>
<h:outputText
value=
"#{i18n['applicationPermission.name']}"
/>
<h:outputText
value=
"#{i18n['applicationPermission.name']}"
/>
</f:facet>
</f:facet>
<h:outputText
value=
"#{bapp.name}"
/>
<h:outputText
value=
"#{bapp.name}"
/>
</h:column>
</h:column>
<h:column>
<h:column>
<f:facet
name=
"header"
>
<f:facet
name=
"header"
>
<h:outputText
value=
"#{i18n['applicationPermission.description']}"
/>
<h:outputText
value=
"#{i18n['applicationPermission.description']}"
/>
</f:facet>
</f:facet>
<h:outputText
value=
"#{i18n[bapp.key]}"
/>
<h:outputText
value=
"#{i18n[bapp.key]}"
/>
</h:column>
</h:column>
<h:column>
<h:column>
<h:selectManyCheckbox
id=
"permissions"
layout=
"pageDirection"
value=
"#{bapp.selected}"
>
<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:selectManyCheckbox>
</h:column>
</h:column>
</h:dataTable>
</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>
</h:form>
</p:fieldset>
</p:fieldset>
...
...
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/organisation/EventOrgView.java
View file @
47fe756
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
package
fi
.
codecrew
.
moya
.
web
.
cdiview
.
organisation
;
package
fi
.
codecrew
.
moya
.
web
.
cdiview
.
organisation
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
javax.ejb.EJB
;
import
javax.ejb.EJB
;
...
@@ -329,5 +330,10 @@ public class EventOrgView extends GenericCDIView {
...
@@ -329,5 +330,10 @@ public class EventOrgView extends GenericCDIView {
return
permbean
.
getCurrentUser
().
isSuperadmin
();
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 {
...
@@ -122,6 +122,16 @@ public class RoleView extends GenericCDIView {
private
void
initPermissions
()
{
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
);
logger
.
info
(
"Initializing permissions for role {}"
,
role
);
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>
rolePermissionMap
=
new
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>(
BortalApplication
.
class
);
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>
rolePermissionMap
=
new
EnumMap
<
BortalApplication
,
Set
<
IAppPermission
>>(
BortalApplication
.
class
);
if
(
role
.
getPermissions
()
==
null
)
{
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