diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index a78b802ad7..a5ce3628e3 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -44,6 +44,10 @@ export default React.createClass({ // Specifying 'fullWidth' as true will render the app tile to fill the width of the app drawer continer. // This should be set to true when there is only one widget in the app drawer, otherwise it should be false. fullWidth: React.PropTypes.bool, + // UserId of the current user + userId: React.PropTypes.string.isRequired, + // UserId of the entity that added / modified the widget + creatorUserId: React.PropTypes.string, }, getDefaultProps: function() { @@ -59,7 +63,8 @@ export default React.createClass({ loading: false, widgetUrl: this.props.url, widgetPermissionId: widgetPermissionId, - hasPermissionToLoad: Boolean(hasPermissionToLoad === 'true'), + // Assume that widget has permission to load if we are the user who added it to the room, or if explicitly granted by the user + hasPermissionToLoad: hasPermissionToLoad === 'true' || this.props.userId === this.props.creatorUserId, error: null, deleting: false, }; diff --git a/src/components/views/rooms/AppsDrawer.js b/src/components/views/rooms/AppsDrawer.js index 4bc98abb6f..514a6ebf96 100644 --- a/src/components/views/rooms/AppsDrawer.js +++ b/src/components/views/rooms/AppsDrawer.js @@ -93,7 +93,7 @@ module.exports = React.createClass({ return pathTemplate; }, - _initAppConfig: function(appId, app) { + _initAppConfig: function(appId, app, sender) { const user = MatrixClientPeg.get().getUser(this.props.userId); const params = { '$matrix_user_id': this.props.userId, @@ -111,6 +111,7 @@ module.exports = React.createClass({ app.id = appId; app.name = app.name || app.type; app.url = this.encodeUri(app.url, params); + app.creatorUserId = (sender && sender.userId) ? sender.userId : null; return app; }, @@ -131,7 +132,7 @@ module.exports = React.createClass({ return appsStateEvents.filter((ev) => { return ev.getContent().type && ev.getContent().url; }).map((ev) => { - return this._initAppConfig(ev.getStateKey(), ev.getContent()); + return this._initAppConfig(ev.getStateKey(), ev.getContent(), ev.sender); }); }, @@ -183,6 +184,7 @@ module.exports = React.createClass({ fullWidth={arr.length<2 ? true : false} room={this.props.room} userId={this.props.userId} + creatorUserId={app.creatorUserId} />); });