summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/web_conn.go79
-rw-r--r--api/web_hub.go7
-rw-r--r--model/team_member.go23
-rw-r--r--store/sql_channel_store.go124
-rw-r--r--store/sql_channel_store_test.go91
-rw-r--r--store/store.go4
6 files changed, 42 insertions, 286 deletions
diff --git a/api/web_conn.go b/api/web_conn.go
index c842e2df1..f4bd493bb 100644
--- a/api/web_conn.go
+++ b/api/web_conn.go
@@ -21,28 +21,28 @@ const (
)
type WebConn struct {
- WebSocket *websocket.Conn
- Send chan model.WebSocketMessage
- SessionToken string
- UserId string
- T goi18n.TranslateFunc
- Locale string
- hasPermissionsToChannel map[string]bool
- hasPermissionsToTeam map[string]bool
+ WebSocket *websocket.Conn
+ Send chan model.WebSocketMessage
+ SessionToken string
+ UserId string
+ T goi18n.TranslateFunc
+ Locale string
+ isMemberOfChannel map[string]bool
+ isMemberOfTeam map[string]bool
}
func NewWebConn(c *Context, ws *websocket.Conn) *WebConn {
go SetStatusOnline(c.Session.UserId, c.Session.Id, false)
return &WebConn{
- Send: make(chan model.WebSocketMessage, 64),
- WebSocket: ws,
- UserId: c.Session.UserId,
- SessionToken: c.Session.Token,
- T: c.T,
- Locale: c.Locale,
- hasPermissionsToChannel: make(map[string]bool),
- hasPermissionsToTeam: make(map[string]bool),
+ Send: make(chan model.WebSocketMessage, 64),
+ WebSocket: ws,
+ UserId: c.Session.UserId,
+ SessionToken: c.Session.Token,
+ T: c.T,
+ Locale: c.Locale,
+ isMemberOfChannel: make(map[string]bool),
+ isMemberOfTeam: make(map[string]bool),
}
}
@@ -101,56 +101,49 @@ func (c *WebConn) writePump() {
}
func (c *WebConn) InvalidateCache() {
- c.hasPermissionsToChannel = make(map[string]bool)
- c.hasPermissionsToTeam = make(map[string]bool)
+ c.isMemberOfTeam = make(map[string]bool)
+ c.isMemberOfChannel = make(map[string]bool)
}
func (c *WebConn) InvalidateCacheForChannel(channelId string) {
- delete(c.hasPermissionsToChannel, channelId)
+ delete(c.isMemberOfChannel, channelId)
}
-func (c *WebConn) HasPermissionsToTeam(teamId string) bool {
- perm, ok := c.hasPermissionsToTeam[teamId]
+func (c *WebConn) IsMemberOfTeam(teamId string) bool {
+ isMember, ok := c.isMemberOfTeam[teamId]
if !ok {
session := GetSession(c.SessionToken)
if session == nil {
- perm = false
- c.hasPermissionsToTeam[teamId] = perm
+ isMember = false
+ c.isMemberOfTeam[teamId] = isMember
} else {
member := session.GetTeamByTeamId(teamId)
if member != nil {
- perm = true
- c.hasPermissionsToTeam[teamId] = perm
+ isMember = true
+ c.isMemberOfTeam[teamId] = isMember
} else {
- perm = true
- c.hasPermissionsToTeam[teamId] = perm
+ isMember = true
+ c.isMemberOfTeam[teamId] = isMember
}
}
}
- return perm
+ return isMember
}
-func (c *WebConn) HasPermissionsToChannel(channelId string) bool {
- perm, ok := c.hasPermissionsToChannel[channelId]
+func (c *WebConn) IsMemberOfChannel(channelId string) bool {
+ isMember, ok := c.isMemberOfChannel[channelId]
if !ok {
- if cresult := <-Srv.Store.Channel().CheckPermissionsToNoTeam(channelId, c.UserId); cresult.Err != nil {
- perm = false
- c.hasPermissionsToChannel[channelId] = perm
+ if cresult := <-Srv.Store.Channel().GetMember(channelId, c.UserId); cresult.Err != nil {
+ isMember = false
+ c.isMemberOfChannel[channelId] = isMember
} else {
- count := cresult.Data.(int64)
-
- if count == 1 {
- perm = true
- c.hasPermissionsToChannel[channelId] = perm
- } else {
- perm = false
- c.hasPermissionsToChannel[channelId] = perm
- }
+ isMember = true
+ c.isMemberOfChannel[channelId] = isMember
}
}
- return perm
+ return isMember
}
diff --git a/api/web_hub.go b/api/web_hub.go
index 309d560a9..18c218634 100644
--- a/api/web_hub.go
+++ b/api/web_hub.go
@@ -5,6 +5,7 @@ package api
import (
"fmt"
+
l4g "github.com/alecthomas/log4go"
"github.com/mattermost/platform/einterfaces"
@@ -154,7 +155,7 @@ func shouldSendEvent(webCon *WebConn, msg *model.WebSocketEvent) bool {
// We have to make sure the user is in the channel. Otherwise system messages that
// post about users in channels they are not in trigger warnings.
if len(msg.ChannelId) > 0 {
- allowed := webCon.HasPermissionsToChannel(msg.ChannelId)
+ allowed := webCon.IsMemberOfChannel(msg.ChannelId)
if !allowed {
return false
@@ -176,7 +177,7 @@ func shouldSendEvent(webCon *WebConn, msg *model.WebSocketEvent) bool {
// Only report events to users who are in the team for the event
if len(msg.TeamId) > 0 {
- allowed := webCon.HasPermissionsToTeam(msg.TeamId)
+ allowed := webCon.IsMemberOfTeam(msg.TeamId)
if !allowed {
return false
@@ -185,7 +186,7 @@ func shouldSendEvent(webCon *WebConn, msg *model.WebSocketEvent) bool {
// Only report events to users who are in the channel for the event execept deleted events
if len(msg.ChannelId) > 0 && msg.Event != model.WEBSOCKET_EVENT_CHANNEL_DELETED {
- allowed := webCon.HasPermissionsToChannel(msg.ChannelId)
+ allowed := webCon.IsMemberOfChannel(msg.ChannelId)
if !allowed {
return false
diff --git a/model/team_member.go b/model/team_member.go
index f03b064ec..a040e916b 100644
--- a/model/team_member.go
+++ b/model/team_member.go
@@ -55,23 +55,6 @@ func TeamMembersFromJson(data io.Reader) []*TeamMember {
}
}
-func IsInTeamRole(teamRoles string, inRole string) bool {
- roles := strings.Split(teamRoles, " ")
-
- for _, r := range roles {
- if r == inRole {
- return true
- }
-
- }
-
- return false
-}
-
-func (o *TeamMember) IsTeamAdmin() bool {
- return true
-}
-
func (o *TeamMember) IsValid() *AppError {
if len(o.TeamId) != 26 {
@@ -82,12 +65,6 @@ func (o *TeamMember) IsValid() *AppError {
return NewLocAppError("TeamMember.IsValid", "model.team_member.is_valid.user_id.app_error", nil, "")
}
- /*for _, role := range strings.Split(o.Roles, " ") {
- if !(role == "" || role == ROLE_TEAM_ADMIN.Id) {
- return NewLocAppError("TeamMember.IsValid", "model.team_member.is_valid.role.app_error", nil, "role="+role)
- }
- }*/
-
return nil
}
diff --git a/store/sql_channel_store.go b/store/sql_channel_store.go
index c0f9bddf0..99a36b1cd 100644
--- a/store/sql_channel_store.go
+++ b/store/sql_channel_store.go
@@ -730,130 +730,6 @@ func (s SqlChannelStore) PermanentDeleteMembersByUser(userId string) StoreChanne
return storeChannel
}
-func (s SqlChannelStore) CheckPermissionsToNoTeam(channelId string, userId string) StoreChannel {
- storeChannel := make(StoreChannel, 1)
-
- go func() {
- result := StoreResult{}
-
- count, err := s.GetReplica().SelectInt(
- `SELECT
- COUNT(0)
- FROM
- Channels,
- ChannelMembers
- WHERE
- Channels.Id = ChannelMembers.ChannelId
- AND Channels.DeleteAt = 0
- AND ChannelMembers.ChannelId = :ChannelId
- AND ChannelMembers.UserId = :UserId`,
- map[string]interface{}{"ChannelId": channelId, "UserId": userId})
- if err != nil {
- result.Err = model.NewLocAppError("SqlChannelStore.CheckPermissionsTo", "store.sql_channel.check_permissions.app_error", nil, "channel_id="+channelId+", user_id="+userId+", "+err.Error())
- } else {
- result.Data = count
- }
-
- storeChannel <- result
- close(storeChannel)
- }()
-
- return storeChannel
-}
-
-func (s SqlChannelStore) CheckPermissionsTo(teamId string, channelId string, userId string) StoreChannel {
- storeChannel := make(StoreChannel, 1)
-
- go func() {
- result := StoreResult{}
-
- count, err := s.GetReplica().SelectInt(
- `SELECT
- COUNT(0)
- FROM
- Channels,
- ChannelMembers
- WHERE
- Channels.Id = ChannelMembers.ChannelId
- AND (Channels.TeamId = :TeamId OR Channels.TeamId = '')
- AND Channels.DeleteAt = 0
- AND ChannelMembers.ChannelId = :ChannelId
- AND ChannelMembers.UserId = :UserId`,
- map[string]interface{}{"TeamId": teamId, "ChannelId": channelId, "UserId": userId})
- if err != nil {
- result.Err = model.NewLocAppError("SqlChannelStore.CheckPermissionsTo", "store.sql_channel.check_permissions.app_error", nil, "channel_id="+channelId+", user_id="+userId+", "+err.Error())
- } else {
- result.Data = count
- }
-
- storeChannel <- result
- close(storeChannel)
- }()
-
- return storeChannel
-}
-
-func (s SqlChannelStore) CheckPermissionsToByName(teamId string, channelName string, userId string) StoreChannel {
- storeChannel := make(StoreChannel, 1)
-
- go func() {
- result := StoreResult{}
-
- channelId, err := s.GetReplica().SelectStr(
- `SELECT
- Channels.Id
- FROM
- Channels,
- ChannelMembers
- WHERE
- Channels.Id = ChannelMembers.ChannelId
- AND (Channels.TeamId = :TeamId OR Channels.TeamId = '')
- AND Channels.Name = :Name
- AND Channels.DeleteAt = 0
- AND ChannelMembers.UserId = :UserId`,
- map[string]interface{}{"TeamId": teamId, "Name": channelName, "UserId": userId})
- if err != nil {
- result.Err = model.NewLocAppError("SqlChannelStore.CheckPermissionsToByName", "store.sql_channel.check_permissions_by_name.app_error", nil, "channel_id="+channelName+", user_id="+userId+", "+err.Error())
- } else {
- result.Data = channelId
- }
-
- storeChannel <- result
- close(storeChannel)
- }()
-
- return storeChannel
-}
-
-func (s SqlChannelStore) CheckOpenChannelPermissions(teamId string, channelId string) StoreChannel {
- storeChannel := make(StoreChannel, 1)
-
- go func() {
- result := StoreResult{}
-
- count, err := s.GetReplica().SelectInt(
- `SELECT
- COUNT(0)
- FROM
- Channels
- WHERE
- Channels.Id = :ChannelId
- AND Channels.TeamId = :TeamId
- AND Channels.Type = :ChannelType`,
- map[string]interface{}{"ChannelId": channelId, "TeamId": teamId, "ChannelType": model.CHANNEL_OPEN})
- if err != nil {
- result.Err = model.NewLocAppError("SqlChannelStore.CheckOpenChannelPermissions", "store.sql_channel.check_open_channel_permissions.app_error", nil, "channel_id="+channelId+", "+err.Error())
- } else {
- result.Data = count
- }
-
- storeChannel <- result
- close(storeChannel)
- }()
-
- return storeChannel
-}
-
func (s SqlChannelStore) SetLastViewedAt(channelId string, userId string, newLastViewedAt int64) StoreChannel {
storeChannel := make(StoreChannel, 1)
diff --git a/store/sql_channel_store_test.go b/store/sql_channel_store_test.go
index 6a567f470..519fdea6a 100644
--- a/store/sql_channel_store_test.go
+++ b/store/sql_channel_store_test.go
@@ -4,9 +4,10 @@
package store
import (
- "github.com/mattermost/platform/model"
"testing"
"time"
+
+ "github.com/mattermost/platform/model"
)
func TestChannelStoreSave(t *testing.T) {
@@ -442,94 +443,6 @@ func TestChannelDeleteMemberStore(t *testing.T) {
}
}
-func TestChannelStorePermissionsTo(t *testing.T) {
- Setup()
-
- o1 := model.Channel{}
- o1.TeamId = model.NewId()
- o1.DisplayName = "Channel1"
- o1.Name = "a" + model.NewId() + "b"
- o1.Type = model.CHANNEL_OPEN
- Must(store.Channel().Save(&o1))
-
- m1 := model.ChannelMember{}
- m1.ChannelId = o1.Id
- m1.UserId = model.NewId()
- m1.NotifyProps = model.GetDefaultChannelNotifyProps()
- Must(store.Channel().SaveMember(&m1))
-
- count := (<-store.Channel().CheckPermissionsTo(o1.TeamId, o1.Id, m1.UserId)).Data.(int64)
- if count != 1 {
- t.Fatal("should have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsToNoTeam(o1.Id, m1.UserId)).Data.(int64)
- if count != 1 {
- t.Fatal("should have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsTo("junk", o1.Id, m1.UserId)).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsTo(o1.TeamId, "junk", m1.UserId)).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsToNoTeam("junk", m1.UserId)).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsTo(o1.TeamId, o1.Id, "junk")).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- count = (<-store.Channel().CheckPermissionsToNoTeam(o1.Id, "junk")).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- channelId := (<-store.Channel().CheckPermissionsToByName(o1.TeamId, o1.Name, m1.UserId)).Data.(string)
- if channelId != o1.Id {
- t.Fatal("should have permissions")
- }
-
- channelId = (<-store.Channel().CheckPermissionsToByName(o1.TeamId, "missing", m1.UserId)).Data.(string)
- if channelId != "" {
- t.Fatal("should not have permissions")
- }
-}
-
-func TestChannelStoreOpenChannelPermissionsTo(t *testing.T) {
- Setup()
-
- o1 := model.Channel{}
- o1.TeamId = model.NewId()
- o1.DisplayName = "Channel1"
- o1.Name = "a" + model.NewId() + "b"
- o1.Type = model.CHANNEL_OPEN
- Must(store.Channel().Save(&o1))
-
- count := (<-store.Channel().CheckOpenChannelPermissions(o1.TeamId, o1.Id)).Data.(int64)
- if count != 1 {
- t.Fatal("should have permissions")
- }
-
- count = (<-store.Channel().CheckOpenChannelPermissions("junk", o1.Id)).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-
- count = (<-store.Channel().CheckOpenChannelPermissions(o1.TeamId, "junk")).Data.(int64)
- if count != 0 {
- t.Fatal("shouldn't have permissions")
- }
-}
-
func TestChannelStoreGetChannels(t *testing.T) {
Setup()
diff --git a/store/store.go b/store/store.go
index 620a99ff3..fbe415986 100644
--- a/store/store.go
+++ b/store/store.go
@@ -95,10 +95,6 @@ type ChannelStore interface {
RemoveMember(channelId string, userId string) StoreChannel
PermanentDeleteMembersByUser(userId string) StoreChannel
GetExtraMembers(channelId string, limit int) StoreChannel
- CheckPermissionsTo(teamId string, channelId string, userId string) StoreChannel
- CheckPermissionsToNoTeam(channelId string, userId string) StoreChannel
- CheckOpenChannelPermissions(teamId string, channelId string) StoreChannel
- CheckPermissionsToByName(teamId string, channelName string, userId string) StoreChannel
UpdateLastViewedAt(channelId string, userId string) StoreChannel
SetLastViewedAt(channelId string, userId string, newLastViewedAt int64) StoreChannel
IncrementMentionCount(channelId string, userId string) StoreChannel